实战:数据库和 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. 回滚时数据库和代码如何配合。

必须确认的风险

看到这些要拒绝

数据库任务验收前检查

检查项必须回答
环境本地、测试、预发、生产分别怎么处理
影响范围表、字段、行数、调用方
回滚如何撤回结构或数据变化
备份是否需要备份,谁确认
权限谁能执行,是否需要审批
验证执行前后如何确认结果

验收模板

请做数据库变更验收,不要执行生产操作。

请输出:
1. 本次变更属于哪一类。
2. 修改了哪些迁移、模型、查询或接口文件。
3. 是否影响已有数据。
4. 是否有回滚方案。
5. 是否需要人工 DBA 或负责人确认。
6. 本地或测试环境如何验证。
7. 上线前必须检查什么。

验收结果