MySQL 数据库操作
使用此技能进行 MySQL 特定的模式、查询、索引、事务和操作工作。在依赖版本特定行为之前,请先确定实际的服务器版本、SQL 模式、存储引擎、字符集/排序规则、拓扑结构和环境。
查询前先发现
优先使用仓库迁移、模式定义、ORM 映射和只读元数据查询。确认表粒度、主键和唯一键、外键、可空性、生成列、分区、索引、数据量和关系。不要从应用程序字段推断物理列名。
保护凭据和行数据。切勿打印连接字符串、密钥、完整客户记录或不必要的个人数据。在满足任务要求的情况下,使用最低权限账户和非生产环境或只读副本。
编写正确、有界的查询
- 当契约已知时,选择命名列而不是
SELECT *。 - 对值使用类型化参数;切勿将不受信任的输入拼接进 SQL 标识符或表达式。
- 明确联接基数,并在聚合前检查是否会导致行数倍增。
- 有意识地处理
NULL、时区、排序规则、精度以及包含/排除的时间边界。 - 为分页或可重复的提取添加确定性的排序。在适用时,优先使用键集分页处理大型可变数据集。
- 使用选择性的谓词和限制来限定探索性查询的范围,但不要添加一个会静默改变所需聚合或完整性保证的限制。
通过计数、分母、边界情况以及在决策关键时进行独立计算来验证结果。
安全地分析性能
使用最小侵入性的可用计划命令。优先使用 EXPLAIN 或文档记录的非执行格式;仅在语句及其工作负载被授权且有界的情况下使用 EXPLAIN ANALYZE。检查估计行数与实际行数、访问类型、所选和可能的键、联接顺序、临时表、排序、覆盖行为以及谓词选择性。
索引是一种权衡。评估列顺序、等值/范围谓词、排序、覆盖需求、前缀长度、写入放大、存储、锁定/构建行为、冗余索引以及实际工作负载频率。不要断言每个过滤或联接列都需要自己的索引。
控制变更和事务
在 INSERT、UPDATE、DELETE、DDL、锁定、维护、复制或配置更改之前,确认目标环境、影响行数估计、授权、事务/锁定行为、备份或回滚路径以及可观测的停止条件。尽可能通过只读查询预览确切的更改目标集合。
根据实际的引擎和操作使用事务;不要假设所有 DDL 或外部影响都可以回滚。保持事务简短,使用稳定的谓词,检查死锁/重试行为,并在提交前验证影响的行数。对于模式/数据迁移,使用分阶段兼容的方法,而不是破坏性的就地更改。
未经对该操作和环境明确的授权,切勿执行生产环境中的变更、创建/删除索引、更改用户或权限、修改复制、终止会话或修改服务器配置。
交接
返回 SQL 或变更计划、假设、模式/版本证据、参数、预期的基数、计划发现、安全边界和验证步骤。如果执行已授权,请包括环境、时间戳、影响的行数、事务结果、变更前后证据、剩余风险以及恢复状态。一个成功的命令是不够的;验证所请求的数据或操作结果。