複数行同時にUPDATEしてみる

UPDATE文を1行ずつチマチマ更新していくのはめんどくさいなぁ、と。

テーブル名:hoehoe_tbl

id name create_date birth
1 うらら 2014-03-19 00:00:00 2000-01-01
2 プリン 2014-03-19 02:13:24 2000-01-01
3 ジャガー 2014-03-19 03:02:11 2000-01-01
4 マイケル 2014-03-19 06:00:21 1958-08-29

こんなだったとして。
「マイケル」以外の誕生日がめちゃくちゃじゃないの!という時は

update `hoehoe_tbl` SET `birth` = '2477-05-30' WHERE `id` = 1
update `hoehoe_tbl` SET `birth` = '2477-11-11' WHERE `id` = 2
update `hoehoe_tbl` SET `birth` = '2464-07-06' WHERE `id` = 3

とかやっていた訳ですが。
(プリンとジャガーの誕生日知りません。デタラメです。)

CASEステートメントを使ってこうもできるらしい。

update `hoehoe_tbl` SET 
`birth` =
  case `id`
    WHEN 1 THEN '2477-05-30'
    WHEN 2 THEN '2477-11-11'
    WHEN 3 THEN '2464-07-06'
  END
WHERE `id` IN (1,2,3);

これで、SQL文がひとつにまとまって便利。
複数カラムを同時に更新するときは、UPDATE文の書き方そのままに

update `hoehoe_tbl` SET 
`name` =
  case `id`
    WHEN 1 THEN 'URARA'
    WHEN 2 THEN 'PUDDING'
    WHEN 3 THEN 'JAGUAR'
  END
, `birth` =
  case `id`
    WHEN 1 THEN '2477-05-30'
    WHEN 2 THEN '2477-11-11'
    WHEN 3 THEN '2464-07-06'
  END
, `create_date` = NOW()
WHERE `id` IN (1,2,3);

こんな?
UPDATE文なので、最後のWHERE句の指定を忘れると、該当する行以外全部吹っ飛ぶ。