在資料表中新增一個標記欄位,例如 is_del (TINYINT,預設 0)。
UPDATE table SET is_del = 1 WHERE id = ?WHERE is_del = 0啟動 MySQL 時加入 -U 或 --safe-updates 參數。
mysqld --safe-updates ...
或在 my.cnf 的 [mysqld] 區塊添加:
safe-updates = 1
效果: 若 DELETE 或 UPDATE 缺少 WHERE 條件(或未使用索引鍵),語句將直接報錯拒絕執行,有效防止全表誤刪。
| 場景 | 推薦策略 |
|---|---|
| 業務允許資料恢復、需保留歷史 | 軟刪除 |
| 生產環境防人為誤操作、不想改代碼 | --safe-updates |
| 兩者兼備 | 同時啟用 |
--safe-upsets 也會限制 SELECT 必須帶 LIMIT,可能影響某些報表查詢,可在會話中用 SET SQL_SAFE_UPDATES=0 臨時關閉。is_del=1 且超過保留期的記錄。