危険察知記述難易度 基礎

状況

MySQL の本番 DB で商品 1 件(sku = 'A-100')の価格を直す作業。BEGIN を実行してから UPDATE したところ、次の結果が出た。

COMMIT の前に、次に打つべき SQL を書いてください。

mysql> UPDATE products SET price = 980 WHERE sku = 'A-100';Query OK, 1000 rows affected (0.21 sec)Rows matched: 1000  Changed: 1000  Warnings: 0mysql> ____

正答

正答ROLLBACK

次も正解: ROLLBACK WORK(空白の有無・大文字小文字・末尾のセミコロンは問いません)

解説

1 件を直すつもりの UPDATE で 1000 rows affected と出たら、sku が一意でない、条件が違う、など想定と異なる何かがある。BEGIN の中なので、ROLLBACK すれば変更はすべて取り消せる。ここで COMMIT してから戻そうとすると、元の価格はバックアップにしか残っていない。Warnings: 0 は型変換などの警告がないという意味で、対象行数が正しいことは示さない。影響行数は UPDATE の後に必ず読む数字。

参考: dev.mysql.com

sqlrollbackrow-count

この問題を含む 危険察知 のテストを制限時間つきで解く

危険察知クイズへ