SQL 更新與刪除(防手滑)
改數據前先 SELECT 一遍,改完再確認。
範本正文
-- 第 1 步:先 SELECT 出要改的行,確認數量 SELECT COUNT(*) FROM users WHERE status = 'pending' AND created_at < '2026-01-01'; -- 第 2 步:把同樣的 WHERE 寫進 UPDATE UPDATE users SET status = 'expired', updated_at = NOW() WHERE status = 'pending' AND created_at < '2026-01-01'; -- 第 3 步:確認影響行數符合預期,再提交事務 -- (生產庫建議先 BEGIN; ... 檢查後 COMMIT;) -- 刪除同理 DELETE FROM sessions WHERE expires_at < NOW() LIMIT 1000;
怎麼用
任何 UPDATE/DELETE 都按這個流程走。
使用要點
- UPDATE/DELETE 沒寫 WHERE 就是全表操作,寫之前先想三秒。
- 生產環境先開事務,確認行數對了再 COMMIT。