1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[MySQL5.6] バルクアップデート(ELT/FIELD)でnullが登録される

Posted at

速度改善のためにバルクアップデート使いますよね。
ELT/FIELD句を使ったバルクアップデートが便利ですが、使い方には要注意です。

結論

WHEREのid指定とELT/FIELDのid指定は同じ数でないといけない。
差分更新ができない。

テストケース

進級にあたってクラス名を変更したい。
ただしIDが3の生徒はクラス名が変わらないとします。

■生徒テーブル
ID クラス名
1 1-Aクラス
2 1-Bクラス
3 1-Cクラス
4 1-Dクラス
5 1-Eクラス
-- 3番目のレコードだけ更新をスキップしようとした場合
UPDATE `students`
SET `class` = ELT(FIELD(id, 1, 2, 4, 5), '2-Aクラス', '2-Bクラス', '2-Dクラス', '2-Eクラス'),
WHERE `id` IN (1, 2, 3, 4, 5);
■結果
ID クラス名
1 2-Aクラス
2 2-Bクラス
3 null
4 2-Dクラス
5 2-Eクラス

!?!?!?!?

「WHERE句のid指定数」よりも「ELT/FIELDのid指定数」が少ない場合

ELT/FIELDで指定が漏れたものに関してはnullで更新される。

「WHERE句のid指定数」よりも「ELT/FIELDのid指定数」が多い場合

WHEREを基準に実行されるため、更新されない。
特に問題ない

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?