MySQL の Safe Updates モードを無効化する方法
ここでは MySQL の Safe Updates モードとは何かと、Safe Updates モードを無効化する方法をご説明します。
MySQL の Safe Updates モードとは?
MySQL の Safe Updates モードが ON の時は、UPDATE 文と DELETE 文で WHERE 句をつけなかったり、WHERE 句でキーカラムを使って条件文を指定しなかった時にエラーになるモードです。
例えば、MySQL Workbench で exam_results テーブルの score < 70 のレコードを削除する 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. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.
間違って大量のデータを更新・削除してしまうのを防ぐ機能で、Safe Updates モードのデフォルトは ON になっています。
MySQL の 現在の Safe Updates モードの ON/OFF を確認する
MySQL の 現在の Safe Updates モードの ON/OFF を確認するには、MySQL サーバのシステム変数一覧を表示する SHOW VARIABLES ステートメントで確認できます。
LIKE 句に 'sql_safe_updates' を指定します。
SHOW VARIABLES LIKE 'sql_safe_updates';
現在の Safe Updates モード は ON になっています。
MySQL で Safe Updates モードをクエリーで一時的に無効化する
間違ってデータを更新・削除してしまうのを防いでくれるのはありがたいですが、WHERE 句にキー以外のカラムを指定してデータを更新・削除したい時もあると思います。
そんな時はクエリーで Safe Updates モードを無効化することができます。
Safe Updates モードを無効化するクエリーは次の通りです。
SET sql_safe_updates = 0;
上のクエリーを実行して、現在の Safe Updates モードの ON/OFF を確認し、もう一度 DELETE 文を実行してみます。
Safe Updates モードが OFF になり、exam_results テーブルの score < 70 のレコードを削除する DELETE 文を実行が成功しました。
Safe Updates モードを有効化に戻したい時は sql_safe_updates を 1 にします。
SET sql_safe_updates = 1;
この設定は同じコネクションの間は有効ですが、一度 MySQL Workbench を閉じて接続しなおすとまた sql_safe_updates は ON に戻ります。
MySQL Workbench で Safe Updates モードをずっと無効にする
先ほどのクエリーで Safe Updates モードを OFF にする方法は一時的なものでした。
MySQL Workbench の設定画面を使うと、Safe Updates モードをずっと無効のままにしておくことができます。
メニューから Mac では [MySQL Workbench] > [Preferences...] を選択します。
Windows では [Edit] メニューにあります。
Workbench Preferences 画面が開くので、左側で SQL Editor を選択し、一番したの 「Safe Updates (rejects UPDATEs and DELETEs with no restrictions)」のチェックボックスを OFF にして OK ボタンをクリックします。
この状態ではまだ Safe Updates モード は ON のままで、MySQL Workbench を一度閉じて接続しなおすと Safe Updates モード が OFF になります。
この Safe Updates モードの設定はずっと有効です。
以上、MySQL の Safe Updates モードとは何かと、Safe Updates モードを無効化する方法をご説明しました。