状況
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
この問題を含む 危険察知 のテストを制限時間つきで解く
危険察知クイズへ