实战:数据库和 SQL 变更
Claude Code 数据库变更教程:数据库任务属于高风险操作,默认先只读分析,不直接执行 SQL,不连接生产库。
先只读分析
数据库任务默认高风险。第一原则:不要让 CC 直接连生产库,不要让 CC 直接执行 SQL,不要把生产数据贴进对话。
/plan 请分析这个数据库或 SQL 相关任务,不要执行任何 SQL。 任务目标: 【描述要查、要改、要新增什么】 要求: 1. 只读分析相关代码、模型、迁移文件和 SQL。 2. 不要连接生产数据库。 3. 不要修改数据库结构。 4. 说明是否需要迁移脚本。 5. 说明回滚方案和风险。
数据库变更必须先看代码、模型、迁移文件和历史 SQL。真正执行 SQL 之前,要有人确认环境、备份、回滚、影响范围。
数据库任务分几类
- 查询类:只需要分析数据或写查询语句,不改数据结构。
- 修数据类:需要更新、删除或补齐已有数据。
- 结构变更类:新增表、字段、索引、约束、迁移脚本。
- 性能优化类:慢查询、索引、分页、缓存。
- 权限和隐私类:账号、权限、脱敏、审计字段。
不同类别风险不同,不要让 CC 混在一起做。
| 类型 | 风险等级 | 默认要求 |
|---|---|---|
| 只读查询 | 低到中 | 只写 SELECT,不连生产库 |
| 修数据 | 高 | 先备份、先预估影响行数、必须回滚方案 |
| 结构变更 | 高 | 迁移脚本、兼容策略、上线顺序 |
| 性能优化 | 中到高 | 看执行计划、索引影响、写入成本 |
| 权限隐私 | 高 | 脱敏、审计、人工确认 |
给 CC 的信息
- 任务目标:查数据、修数据、加字段还是优化查询。
- 涉及环境:本地、测试、预发、生产。
- 涉及表和字段。
- 是否已有迁移工具。
- 是否允许写迁移文件。
- 是否需要回滚方案。
- 是否涉及用户隐私或敏感数据。
如果需求里同时出现“改表、改接口、改页面”,先拆任务:
这个任务涉及数据库、接口和页面,请先拆分,不要直接执行。 请输出: 1. 哪些是数据库变更。 2. 哪些是后端接口变更。 3. 哪些是前端展示变更。 4. 推荐执行顺序。 5. 每一步的验收方式和回滚点。
让 CC 先读迁移体系
请只读分析当前项目的数据库变更方式,不要执行 SQL。 请告诉我: 1. 项目使用什么 ORM、迁移工具或 SQL 管理方式。 2. 历史迁移文件在哪里。 3. 命名风格是什么。 4. 是否有回滚脚本或 down migration。 5. 本次任务应该新增迁移、修改查询,还是只写说明。 6. 哪些操作需要人工确认。
如果需要修数据
修数据比写查询更危险。先让 CC 写方案,不要直接写可执行命令:
请给出修数据方案,不要执行 SQL。 要求: 1. 说明要修哪些数据,判断条件是什么。 2. 先给 SELECT 预览语句,确认影响范围。 3. 再给 UPDATE/DELETE 方案,但不要执行。 4. 说明影响行数如何确认。 5. 说明备份和回滚方案。 6. 标出必须人工确认的点。
如果只是写查询
请帮我写一个只读 SQL 查询。 目标: 【要查什么】 限制: 1. 只写 SELECT,不写 UPDATE/DELETE/INSERT。 2. 不要连接数据库。 3. 说明每个条件的作用。 4. 标记可能影响性能的地方。 5. 如果字段或表名不确定,请先根据项目文件确认,不要猜。
只读 SQL 也要注意性能。可以继续追问:
请检查这个查询的风险。 请说明: 1. 是否可能全表扫描。 2. WHERE 条件是否足够明确。 3. 是否需要 LIMIT。 4. 是否涉及隐私字段。 5. 如果用于生产排查,应该如何降低影响。
如果需要改结构
请给出数据库结构变更方案,不要执行。 要求: 1. 说明为什么需要变更结构。 2. 给出迁移文件方案。 3. 说明是否影响已有数据。 4. 说明是否需要默认值、索引、约束。 5. 说明回滚方案。 6. 说明上线顺序和兼容策略。
结构变更尤其要考虑“新旧代码同时存在”的窗口:
请补充数据库结构变更的兼容策略。 请说明: 1. 旧代码遇到新字段是否安全。 2. 新代码遇到旧数据是否安全。 3. 是否需要先加字段、再发代码、再清理旧字段。 4. 是否需要默认值或数据回填。 5. 回滚时数据库和代码如何配合。
必须确认的风险
- 是否影响已有数据。
- 是否需要回滚脚本。
- 是否影响线上查询性能。
- 是否涉及权限、隐私和生产数据。
- 是否需要停机或灰度。
- 是否存在新旧代码兼容窗口。
- 是否有备份和恢复方案。
看到这些要拒绝
- 直接执行生产 SQL。
- 没有 WHERE 的 UPDATE 或 DELETE。
- 删除字段、删除表、清空数据。
- 让 CC 读取或输出真实用户隐私数据。
- 没有备份和回滚方案就改结构。
- 一次任务里同时改数据库、接口、前端和权限。
数据库任务验收前检查
| 检查项 | 必须回答 |
|---|---|
| 环境 | 本地、测试、预发、生产分别怎么处理 |
| 影响范围 | 表、字段、行数、调用方 |
| 回滚 | 如何撤回结构或数据变化 |
| 备份 | 是否需要备份,谁确认 |
| 权限 | 谁能执行,是否需要审批 |
| 验证 | 执行前后如何确认结果 |
验收模板
请做数据库变更验收,不要执行生产操作。 请输出: 1. 本次变更属于哪一类。 2. 修改了哪些迁移、模型、查询或接口文件。 3. 是否影响已有数据。 4. 是否有回滚方案。 5. 是否需要人工 DBA 或负责人确认。 6. 本地或测试环境如何验证。 7. 上线前必须检查什么。
验收结果
- 没有直接执行 SQL。
- 风险和回滚方案明确。
- 生产数据边界清楚。
- 知道什么时候必须人工确认。