【MySQL】Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. 解決方法

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すればよいのでしょうか?

解決方法

①WHERE句を使う

エラーメッセージにも書いてあるのですが、UPDATEやDELETEを実行する際、WHERE句と一緒に実行することで、SQL_SAFE_UPDATESを回避することができます。

WHERE句を使用せず、UPDATEやDELETE文を実行すると、一度に大量のレコードを変更してしまい、誤って変更する予定のないレコードも変更してしまう恐れがあります。

UPDATEやDELETEを実行する際は、WHERE句と一緒に実行することを推奨しているようです。

しかし、すべてのレコードをUPDATEやDELETEしたいという時も出てきます。

そういった場合、どうすればよいでしょうか?

②SQL_SAFE_UPDATESを無効にする

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を無効にする。