Skip to main content
Glama

mcp-dbutils

MIT License
81
  • Linux
  • Apple
usage-write-operations.md7.87 kB
# 数据库写操作使用指南 本文档详细介绍如何使用MCP数据库工具的写操作功能。在使用写操作功能前,请确保您已经正确配置了数据库连接的写权限。如果您尚未配置,请参阅[数据库写操作配置指南](./configuration-write-operations.md)。 > ⚠️ **安全警告**:数据库写操作可能导致数据丢失或损坏。请谨慎使用,并确保您了解相关风险。建议在执行写操作前备份重要数据。 ## 1. 写操作工具概述 MCP数据库工具提供了`dbutils-execute-write`工具,用于执行数据库写操作(INSERT、UPDATE、DELETE)。该工具仅适用于配置了`writable: true`的数据库连接。 工具定义: ```json { "name": "dbutils-execute-write", "description": "执行数据库写操作(INSERT、UPDATE、DELETE)。仅适用于配置了writable=true的连接。所有操作都会被记录到审计日志中。", "inputSchema": { "type": "object", "properties": { "connection": { "type": "string", "description": "数据库连接名称" }, "sql": { "type": "string", "description": "SQL写操作语句(INSERT、UPDATE、DELETE)" }, "confirmation": { "type": "string", "description": "输入'CONFIRM_WRITE'确认执行写操作" } }, "required": ["connection", "sql", "confirmation"] } } ``` ## 2. 基本用法 ### 2.1 插入数据 ``` 工具: dbutils-execute-write 参数: connection: "example_db" sql: "INSERT INTO users (name, email) VALUES ('张三', 'zhangsan@example.com')" confirmation: "CONFIRM_WRITE" ``` ### 2.2 更新数据 ``` 工具: dbutils-execute-write 参数: connection: "example_db" sql: "UPDATE users SET email = 'new_email@example.com' WHERE id = 123" confirmation: "CONFIRM_WRITE" ``` ### 2.3 删除数据 ``` 工具: dbutils-execute-write 参数: connection: "example_db" sql: "DELETE FROM temp_data WHERE created_at < '2025-01-01'" confirmation: "CONFIRM_WRITE" ``` ## 3. 高级用法 ### 3.1 批量操作 对于批量操作,建议使用数据库支持的批量语法,而不是多次调用工具: ``` 工具: dbutils-execute-write 参数: connection: "example_db" sql: "INSERT INTO logs (event, timestamp) VALUES ('event1', '2025-05-01 10:00:00'), ('event2', '2025-05-01 10:05:00'), ('event3', '2025-05-01 10:10:00')" confirmation: "CONFIRM_WRITE" ``` ### 3.2 事务管理 目前,每个写操作都在单独的事务中执行。如果您需要在一个事务中执行多个操作,请使用数据库支持的事务语法: **MySQL/PostgreSQL示例**: ``` 工具: dbutils-execute-write 参数: connection: "example_db" sql: "BEGIN; INSERT INTO orders (customer_id, total) VALUES (123, 1000); INSERT INTO order_items (order_id, product_id, quantity) VALUES (LAST_INSERT_ID(), 456, 2); COMMIT;" confirmation: "CONFIRM_WRITE" ``` **SQLite示例**: ``` 工具: dbutils-execute-write 参数: connection: "sqlite_db" sql: "BEGIN TRANSACTION; INSERT INTO orders (customer_id, total) VALUES (123, 1000); INSERT INTO order_items (order_id, product_id, quantity) VALUES (last_insert_rowid(), 456, 2); COMMIT;" confirmation: "CONFIRM_WRITE" ``` ## 4. 审计日志 所有写操作都会被记录到审计日志中。您可以通过以下MCP资源访问审计日志: ### 4.1 查看连接的审计日志 ``` 资源: dbutils://audit-logs/{connection_name} ``` 例如: ``` dbutils://audit-logs/example_db ``` ### 4.2 查看特定表的审计日志 ``` 资源: dbutils://audit-logs/{connection_name}/{table_name} ``` 例如: ``` dbutils://audit-logs/example_db/users ``` ## 5. 最佳实践 ### 5.1 安全建议 1. **验证SQL语句**: - 执行写操作前,先使用`dbutils-run-query`验证SELECT语句 - 对于复杂的更新或删除操作,先使用WHERE子句测试影响范围 2. **限制影响范围**: - 使用WHERE子句限制更新或删除的范围 - 考虑使用LIMIT子句限制影响的行数(如果数据库支持) 3. **备份重要数据**: - 在执行重要的写操作前备份数据 - 使用事务确保操作的原子性 ### 5.2 性能建议 1. **批量操作**: - 使用批量插入而不是多次单行插入 - 对于大量数据,考虑分批处理 2. **索引考虑**: - 注意写操作对索引的影响 - 大量写操作可能需要临时禁用索引(需要数据库管理员权限) 3. **事务大小**: - 避免在单个事务中处理过多数据 - 对于大量数据,考虑分割为多个较小的事务 ## 6. 故障排查 ### 6.1 常见错误 | 错误消息 | 可能的原因 | 解决方案 | |---------|-----------|---------| | "Connection is not configured for write operations" | 连接未设置`writable: true` | 在配置文件中添加`writable: true` | | "No permission to perform [操作] on table [表名]" | 表未被允许执行该操作 | 在配置中添加表和操作权限 | | "Operation not confirmed" | 未提供正确的确认参数 | 确保`confirmation`参数为`"CONFIRM_WRITE"` | | "Syntax error in SQL statement" | SQL语法错误 | 检查SQL语句的语法 | | "Foreign key constraint failed" | 违反外键约束 | 检查相关表的数据完整性 | ### 6.2 调试技巧 1. **分析SQL**: - 使用`dbutils-explain-query`分析SQL执行计划 - 使用`dbutils-analyze-query`获取性能建议 2. **检查审计日志**: - 查看审计日志了解操作历史 - 分析失败操作的详细信息 3. **测试环境**: - 在测试环境中先验证复杂操作 - 使用小数据集测试后再应用到大数据集 ## 7. 示例场景 ### 7.1 用户管理系统 **创建用户**: ``` 工具: dbutils-execute-write 参数: connection: "user_db" sql: "INSERT INTO users (username, email, created_at) VALUES ('newuser', 'newuser@example.com', CURRENT_TIMESTAMP)" confirmation: "CONFIRM_WRITE" ``` **更新用户信息**: ``` 工具: dbutils-execute-write 参数: connection: "user_db" sql: "UPDATE users SET email = 'updated@example.com', last_updated = CURRENT_TIMESTAMP WHERE username = 'newuser'" confirmation: "CONFIRM_WRITE" ``` **删除非活跃用户**: ``` 工具: dbutils-execute-write 参数: connection: "user_db" sql: "DELETE FROM users WHERE last_login < DATE_SUB(CURRENT_DATE, INTERVAL 1 YEAR) AND status = 'inactive'" confirmation: "CONFIRM_WRITE" ``` ### 7.2 日志系统 **记录事件**: ``` 工具: dbutils-execute-write 参数: connection: "log_db" sql: "INSERT INTO system_logs (event_type, message, timestamp) VALUES ('LOGIN', 'User login successful', CURRENT_TIMESTAMP)" confirmation: "CONFIRM_WRITE" ``` **清理旧日志**: ``` 工具: dbutils-execute-write 参数: connection: "log_db" sql: "DELETE FROM system_logs WHERE timestamp < DATE_SUB(CURRENT_DATE, INTERVAL 90 DAY)" confirmation: "CONFIRM_WRITE" ``` ### 7.3 库存管理 **更新库存**: ``` 工具: dbutils-execute-write 参数: connection: "inventory_db" sql: "UPDATE products SET stock_quantity = stock_quantity - 5 WHERE product_id = 1234" confirmation: "CONFIRM_WRITE" ``` **批量添加产品**: ``` 工具: dbutils-execute-write 参数: connection: "inventory_db" sql: "INSERT INTO products (name, category, price, stock_quantity) VALUES ('产品A', '电子', 199.99, 100), ('产品B', '电子', 299.99, 50), ('产品C', '家居', 99.99, 200)" confirmation: "CONFIRM_WRITE" ``` ## 8. 相关资源 - [数据库写操作配置指南](./configuration-write-operations.md) - [数据库写操作功能设计](./technical/write-operations-design.md) - [安全架构](./technical/security.md) - [审计日志指南](./technical/audit-logging.md)

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/donghao1393/mcp-dbutils'

If you have feedback or need assistance with the MCP directory API, please join our Discord server