SQLPathLab
SQL 实战指南 · MySQL 8.0

UPDATE 和 DELETE 的安全执行流程

先验证范围,再进入事务修改并检查受影响行数。

问题与判断方法

数据修改最危险的部分通常不是 SET 或 DELETE 关键字,而是 WHERE 范围。第一步使用完全相同的 WHERE 执行 SELECT,检查主键、样本记录和总数;条件不明确时不要继续。

第二步开启事务并执行修改,立即检查受影响行数和关键业务查询。结果符合预期再 COMMIT,否则 ROLLBACK。不要在事务打开时等待长时间人工确认。

事务不能代替备份。大批量修改要考虑锁、日志空间、分批策略和恢复方案;应用层还要限制无 WHERE 的高风险操作。

示例

示例数据表

表名:orders
orders
amountstatus
1200 paid
900 pending
1500 paid
700 cancelled

优化前 / 不推荐

UPDATE orders SET status = 'cancelled' WHERE amount < 1000;

优化前运行结果

orders
amountstatus
1200 paid
900 cancelled
1500 paid
700 cancelled

优化后 / 推荐

SELECT id, amount, status FROM orders WHERE amount < 1000 ORDER BY id;

优化后运行结果

result
idamountstatus
2 900 pending
4 700 cancelled

为什么这样更好:先运行相同 WHERE 的 SELECT 核对主键和范围,再在事务中执行 UPDATE,并检查受影响行数。

这篇内容是否清楚?