MySQL 於命令列模式(Command-Line)時, 要下 DELETE / UPDATE 等指令, 都要特別注意 WHERE 指令有沒有寫, 有沒有問題 等等.
通常都會先用 WHERE 條件做一次 SELECT, 確定沒錯後, 再把 SELECT 改成 DELETE 或 UPDATE 來操作, 不過還是很難避免會有意外狀況, 不小心多刪掉一個字.. 等等的事情.
MySQL 有針對此件事情做了預防, 只要在 CLI 的模式裡面, 加上下述參數即可:
- --i-am-a-dummy 或 --safe-updates 或 -U
--i-am-a-dummy 參數說明
Permit only those UPDATE and DELETE statements that specify which rows to modify by using key values. (取自: MySQL Options)
簡單講, 就是如果 UPDATE / DELETE 的語法, 要修改的 key 值沒有設定 INDEX / Primary key .. 等等, 就會刪除失敗(可以避免意外造成全部砍掉).
範例
- $ mysql -u root -p --i-am-a-dummy # 或 mysql -u root -p -U
- mysql> delete from table; # 沒有
- ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column