MySQLのエラー『エラー1175: Safe Update Mode』の解決方法

MySQLでUPDATEやDELETEクエリを実行しようとした際に「Error 1175: You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column」というエラーが表示される場合がある。これは、MySQL Workbenchなどで「セーフアップデートモード」が有効になっており、プライマリキーやインデックス列に基づいたWHERE句が指定されていない場合に操作がブロックされる仕組みである。
- 1. 1. エラーの発生条件
- 2. 2. セーフアップデートモードとは何か
- 3. 3. エラーの回避方法①:WHERE句に主キーやインデックスを指定する
- 4. 4. エラーの回避方法②:セーフアップデートモードを一時的に無効化
- 5. 5. エラーの回避方法③:MySQL Workbenchの設定を変更
- 6. 6. UPDATE文でも同様のエラーが発生する
- 7. 7. セーフアップデートモードが有効か確認する方法
- 8. 8. セーフアップデートモードをデフォルトで無効にする
- 9. 9. テスト環境と本番環境での扱いの違い
- 10. 10. 明示的に全件更新・削除したい場合
- 11. 11. セーフアップデートモードの効果的な活用
1. エラーの発生条件
セーフアップデートモードが有効になっている環境で、主キーやインデックスを使用しないWHERE句、またはWHERE句自体が存在しないUPDATEやDELETEを実行した場合に発生する。
DELETE FROM users;
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
2. セーフアップデートモードとは何か
誤って全件更新・削除してしまうことを防ぐためのモードであり、MySQL Workbenchではデフォルトで有効になっていることがある。
3. エラーの回避方法①:WHERE句に主キーやインデックスを指定する
セーフアップデートモードを無効にせずにエラーを回避するためには、WHERE句で主キーやインデックス付きの列を指定する。
DELETE FROM users WHERE id = 100;
このように主キー(idなど)を使うとエラーは発生しない。
4. エラーの回避方法②:セーフアップデートモードを一時的に無効化
現在のセッションに限ってセーフアップデートモードを無効にするには、以下のSQLを実行する。
SET SQL_SAFE_UPDATES = 0;
その後に問題のクエリを実行すればエラーは発生しない。
5. エラーの回避方法③:MySQL Workbenchの設定を変更
Workbenchの設定画面からセーフアップデートモードを恒久的にオフにできる。
- Edit > Preferences > SQL Editor を選択
- 「Safe Updates」のチェックを外す
- Workbenchを再起動
6. UPDATE文でも同様のエラーが発生する
UPDATE文でも、WHERE句にインデックスが含まれていない場合はエラー1175が出る。
UPDATE users SET email = 'test@example.com';
これを回避するには、以下のように主キーで限定する必要がある。
UPDATE users SET email = 'test@example.com' WHERE id = 1;
7. セーフアップデートモードが有効か確認する方法
現在のセッションでセーフアップデートモードが有効かどうかは、以下のSQLで確認できる。
SELECT @@SQL_SAFE_UPDATES;
戻り値が「1」なら有効、「0」なら無効。
8. セーフアップデートモードをデフォルトで無効にする
MySQLの設定ファイル(my.cnf)に以下を追加すると、常に無効で起動できる。
[mysqld]
sql_safe_updates=0
設定後はMySQLを再起動する必要がある。
9. テスト環境と本番環境での扱いの違い
テスト環境では一時的に無効化しても問題ないが、本番環境では誤操作防止のためセーフアップデートモードを有効にしておく方が安全。
10. 明示的に全件更新・削除したい場合
セーフアップデートモードを一時的に無効化し、意図的に全行を対象にしたい場合は、SQL文の前に無効化コマンドを加える。
SET SQL_SAFE_UPDATES = 0;
DELETE FROM users;
操作完了後には再度有効にすることも可能。
SET SQL_SAFE_UPDATES = 1;
11. セーフアップデートモードの効果的な活用
セーフアップデートモードは開発中の事故防止策として非常に有効。設定の切り替えやWHERE句の工夫で柔軟に対応できるようにすることが望ましい。
-
前の記事
Failed to compile: error in ./src/main.js の解決方法 2025.04.28
-
次の記事
PHPのエラー『Fatal Error: Trait Method Already Exists』の解決方法 2025.04.28
コメントを書く