素敵なサムシングを独断と偏見で一方的に紹介するブログ(´・ω・`)

IT

【Workbench】MySQLでUPDATEとDELETEが実行時エラーになる原因と解決方法【Error Code: 1175】

投稿日:

スポンサーリンク

336×280




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で一気に対象テーブルのデータを変更しようとすると、以下のようなエラーが発生する事があります。

原因

これは、Workbench上で誤って全てのデータを更新する事が無いようにサーバー接続時に自動で--safe-updatesの制約をつけている事が原因となります。

--safe-updatesを使用すると、行を特定するキー値を指定しないと行を消去出来ないため、GUI上での一括操作ミスを防ぐ事が可能になります。

試しに、where句を指定すれば問題なくupdateが可能になります。

解決方法

一時対応

一時的にSQLを実行したいのであれば、DELETE/UPDATEの前にSET SQL_SAFE_UPDATES = 0;を実行して、--safe-updates無効にすればWHERE句無しのDELETE/UPDATEが可能になります。

ただ、この設定は一度サーバーから接続を切ってサイド接続すると効果が無くなるので接続のたびに指定する必要があるので注意です。

現在の設定を確認する方法

この値が現在どうなっているか確認したい場合には、以下のコマンドを投げる事で確認する事が可能です。

恒久対応

毎回接続のたびにSETコマンドを流すのが大変だという方のために、恒久的な対処方法もご紹介しようと思います。

まずはMySQLWorkbench>Preferencesに移動します。

設定ダイアログが表示されたら、SQL EditorOtherエリアの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にする事も可能です。

用途に合わせて、設定を切り替えてみてください。

336×280




336×280




CATEGORIES & TAGS

IT, , , , , , , , ,

blogenist

Author: blogenist