MySQLでUPDATEおよびDELETE文を実行したとき、以下のようなエラーメッセージが出た時の解決方法を紹介します。
Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.
原因
このエラーですが、構文エラーではなく、SQL_SAFE_UPDATESモードによって発生します。
SQL_SAFE_UPDATESは、データベース内の複数レコードが誤って変更(UPDATE,DELETE)されることを防ぐための機能です。
では、どのようにしてUPDATEやDELETEすればよいのでしょうか?
解決方法
エラーメッセージにも書いてあるのですが、UPDATEやDELETEを実行する際、WHERE句と一緒に実行することで、SQL_SAFE_UPDATESを回避することができます。
WHERE句を使用せず、UPDATEやDELETE文を実行すると、一度に大量のレコードを変更してしまい、誤って変更する予定のないレコードも変更してしまう恐れがあります。
UPDATEやDELETEを実行する際は、WHERE句と一緒に実行することを推奨しているようです。
しかし、すべてのレコードをUPDATEやDELETEしたいという時も出てきます。
そういった場合、どうすればよいでしょうか?
SQL_SAFE_UPDATESによって、エラーが発生するため、一時的に無効にします。
SET SQL_SAFE_UPDATES = 0;
また、Workbenchであれば、「Edit」→「Preferences」でウィンドウを開き
左のサイドメニューから「SQL Editor」から 「Safe Updates(rejects UPDATEs and DELETEs with no restrictions)」のチェックを外すことで、SQL_SAFE_UPDATESを無効にできます。
こうすることで、WHERE句なしでもUPDATEやDELETE文を実行することができます。
まとめ
Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.
このエラーは、SQL_SAFE_UPDATESモードによって発生する。
エラーを回避するには、
UPDATEやDELETEは、WHERE句と一緒に使う。あるいは、SQL_SAFE_UPDATESを無効にする。