不良のUPDATEやDELETEを防ぐ
業務でmysqlを使う場合、本当にカラムの内容を一気に変更することもありますが、それほど頻繁に行うことはありません。うっかり、すべてのカラムを同じ値にする事故があっては困るので
この様な事故を防ぐ為に、MYSQLモニタを起動した時に「--safe-updates」オプションを付ける方法があります。このオプションを付けると、一意のカラムに対するWHEREの条件がないとUPDATEやDELETEが実行出来なくなる。
初心者向の機能
--safe-updates
オプションを使用するとき、mysqlは MySQL サーバーに接続した際以下のステートメントを発行します。
1)mysql>SET sql_safe_updates=1と,SET
ステートメントを発行する。
2)my.cnf で#safe-updatesを外す
[mysql] safe-updates
-
UPDATE
やDELETE
ステートメントは、WHERE
節内でキー制限を特定するか、LIMIT
節を提供するか (あるいは両方) しないかぎり、実行は許容されません。例 :UPDATE
tbl_name
SETnot_key_column
=val
WHEREkey_column
=val
; UPDATEtbl_name
SETnot_key_column
=val
LIMIT 1;
■[MySQL] --safe-updates オプションを無効にする
症状
mysql> UPDATE ... WHERE col1 like "%8"; ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
like を含む UPDATE 文で ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column というエラーが発生した。
などと設定されていて --safe-updates オプションが適用されている。
対策
設定ファイルを編集できないなら、次のコマンドを入力する。
mysql> SET SQL_SAFE_UPDATES=0;
または次のように起動する。
mysql -ufoo -p --safe-updates=false dbname