SQLでカラムを一括して更新したい

8月 16, 2020MySQL,Workbench

MySQLのWorkbenchでの操作方法

失敗例

データベース名test、テーブル名users、カラム名nameにおいて、全てのusersのnameを「野獣先輩」にしたい場合は以下のSQL文を実行します。

UPDATE test.users SET name = "野獣先輩"

しかし、このまま実行すると、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のエラーが返されます。これは、大量のupdateやdeleteをワークベンチから行えない様にMySQLが制約を付けてくれているためです。

解決方法

この場合、以下のように、SET SQL_SAFE_UPDATES = 0;をつけてからUPDATEを実行すると成功します。SQLを実行するときは、雷のアイコンを押下します。安全のために、SET SQL_SAFE_UPDATES = 1;に戻しておくと良いでしょう。

SET SQL_SAFE_UPDATES = 0;
UPDATE test.users SET name = "野獣先輩"
SET SQL_SAFE_UPDATES = 1;
SELECT * FROM test.users;

usersテーブルの全てのnameが「野獣先輩」に更新されました。ヨシ!

カラムが空欄の場合、カラムを一括して別の値を代入するSQL文

SET SQL_SAFE_UPDATES = 0;
UPDATE test.users SET name = "野獣先輩" WHERE sickle = "";
SET SQL_SAFE_UPDATES = 1;
SELECT * FROM test.users;

この処理は間違えて実行すると、レコードが大量にある場合、修復がが不可能になるのでバックアップをとっておいてから実行した方が良いと思われる。

MySQLのWorkbenchのページ一覧

・Workbench入門
・Workbenchでcsvをインポートする方法
MySQLのWorkbenchでカラムの順番を変更する
SQLでカラムを一括して更新したい
Workbenchで自動でコミットしない方法
MySQLで更新するデータに別の列の値を使用する
Workbenchでboolean型のカラムを追加するとtinyint型に変えられてしまう
Workbenchでデータベースをimportする