UPDATE 和 DELETE 的安全执行流程
先验证范围,再进入事务修改并检查受影响行数。
问题与判断方法
数据修改最危险的部分通常不是 SET 或 DELETE 关键字,而是 WHERE 范围。第一步使用完全相同的 WHERE 执行 SELECT,检查主键、样本记录和总数;条件不明确时不要继续。
第二步开启事务并执行修改,立即检查受影响行数和关键业务查询。结果符合预期再 COMMIT,否则 ROLLBACK。不要在事务打开时等待长时间人工确认。
事务不能代替备份。大批量修改要考虑锁、日志空间、分批策略和恢复方案;应用层还要限制无 WHERE 的高风险操作。
示例
示例数据表
表名:
orders| amount | status |
|---|---|
| 1200 | paid |
| 900 | pending |
| 1500 | paid |
| 700 | cancelled |
优化前 / 不推荐
UPDATE orders SET status = 'cancelled' WHERE amount < 1000;优化前运行结果
| amount | status |
|---|---|
| 1200 | paid |
| 900 | cancelled |
| 1500 | paid |
| 700 | cancelled |
优化后 / 推荐
SELECT id, amount, status FROM orders WHERE amount < 1000 ORDER BY id;优化后运行结果
| id | amount | status |
|---|---|---|
| 2 | 900 | pending |
| 4 | 700 | cancelled |
为什么这样更好:先运行相同 WHERE 的 SELECT 核对主键和范围,再在事务中执行 UPDATE,并检查受影响行数。
这篇内容是否清楚?
感谢反馈,我们会把它用于后续内容复核。