工作空间 / SQL 生成后别急着执行:先核对这四件事

SQL 生成后别急着执行:先核对这四件事

区分文本草稿与驱动参数绑定,检查类型、空值和数据库方言。

问题场景

SQL 的参数里有问号、单引号、NULL 和长编号,简单替换占位符后结果不可靠。怎样安全地核对 SQL 草稿?

排查与解法按顺序复现、定位和验证

参数化查询用于业务请求

应用处理用户输入时,通过数据库驱动绑定参数。网页生成 SQL 适合审阅和获准的数据处理草稿,不应替代参数化查询;动态表名、列名也需要允许范围。

区分字符串与标识符

字符串、表名和列名有不同引用规则,MySQL、PostgreSQL 等方言并不相同。不要用简单字符串替换来还原任何 SQL;问号也可能出现在字符串或注释里。

SELECT * FROM users WHERE id = ? AND note = ?;
-- 参数分别绑定:42、字符串 O'Reilly

核对 NULL、缺失和默认值

显式插入 NULL 与省略列让数据库采用默认值不同。生成批量 INSERT 前检查列集合是否一致、自增列和生成列是否允许写入,以及金额和长编号类型。

在可回滚范围验证

先在测试库核对少量数据,检查约束、唯一冲突、事务与批次大小。对比写入前后原值,明确失败时是否回滚。DDL 草稿应另行审核,不能假定所有数据库或操作都支持事务回滚。

参考资料

MySQL · Prepared Statements ↗