投稿日:
2020年1月7日
最終更新日:
【Workbench】MySQLでUPDATEとDELETEが実行時エラーになる原因と解決方法【Error Code: 1175】
YouTubeも見てね♪
ねこじゃすり
猫を魅了する魔法の装備品!
【最新機種】GoPro hero11 Black
最新機種でVlogの思い出を撮影しよう!
[ノースフェイス] THE NORTH FACE メンズ アウター マウンテンライトジャケット
防水暴風で耐久性抜群なので旅行で大活躍です!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
サンディスク microSD 128GB
スマホからSwitchまで使える大容量MicroSDカード!
目次
MySQLWorkbenchでDELETE/UPDATEが実行出来ない
You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
MySQLWorkbenchなどを使ってテーブルデータの操作をしている際に、DELETE/UPDATE
で一気に対象テーブルのデータを変更しようとすると、以下のようなエラーが発生する事があります。
1
2
|
DELETE FROM users;
Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.
|
原因
これは、Workbench上で誤って全てのデータを更新する事が無いようにサーバー接続時に自動で--safe-updates
の制約をつけている事が原因となります。
--safe-updates
を使用すると、行を特定するキー値を指定しないと行を消去出来ないため、GUI上での一括操作ミスを防ぐ事が可能になります。
試しに、where
句を指定すれば問題なくupdate
が可能になります。
1
2
|
DELETE FROM users WHERE id = 1001;
1 row(s) affected
|
解決方法
一時対応
一時的にSQLを実行したいのであれば、DELETE/UPDATE
の前にSET SQL_SAFE_UPDATES = 0;
を実行して、--safe-updates
を無効にすればWHERE
句無しのDELETE/UPDATE
が可能になります。
ただ、この設定は一度サーバーから接続を切ってサイド接続すると効果が無くなるので接続のたびに指定する必要があるので注意です。
現在の設定を確認する方法
この値が現在どうなっているか確認したい場合には、以下のコマンドを投げる事で確認する事が可能です。
1
2
3
4
5
6
|
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| sql_safe_updates | OFF |
+------------------+-------+
1 row in set (0.02 sec)
|
恒久対応
毎回接続のたびにSETコマンドを流すのが大変だという方のために、恒久的な対処方法もご紹介しようと思います。
まずはMySQLWorkbench>Preferencesに移動します。
設定ダイアログが表示されたら、SQL EditorのOtherエリアのSafe Updates(rejects UPDATEs and DELETEs with no restrictions)にチェックが入っていたら、このチェックを外します。
この設定を保存し、再度サーバーに繋ぎ直す事で--safe-updates
が無効になった状態で操作が可能になっているので、WHERE
句無しのDELETE/UPDATE
が可能になります。
注意
この設定はWorkbench全体の共通設定となっているため、例えばローカルDBと開発DB、本番DBなどにWorkbenchから接続を行ってデータ確認等をしている場合、各DBに対してもWHERE句無しのUPDATE/DELETE文が可能になってしまうので、データ紛失に繋がる恐れがあります。
可能であれば、この設定は残したままにしておいて、必要なタイミングでのみSET SQL_SAFE_UPDATES = 0;
を実行するようにした方が運用ミスを避けれるので必要に応じて使い分けてください。
終わりに
以上のように、運用ミスを防いでくれる便利な機能ですが、OFFにする事も可能です。
用途に合わせて、設定を切り替えてみてください。