BEGIN の後に UPDATE を実行し、まだ COMMIT していない。取り消すには?
正答
- ROLLBACK; を実行する
- COMMIT; を実行する
- 逆の値で UPDATE をもう一度実行する
- BEGIN; をもう一度実行する
解説
トランザクションの中で行った変更は COMMIT するまで確定していないため、ROLLBACK を実行すれば BEGIN 時点の状態に戻る。COMMIT は逆に変更を確定させる操作。逆の値で UPDATE をやり直す方法は元の値を正確に覚えている必要があり、複数行を変えた後では現実的でない。BEGIN を重ねて実行しても取り消しにはならず、SQLite では入れ子のトランザクションはエラーになる。
参考: www.sqlite.org
この問題を含む SQL のテストを制限時間つきで解く
SQLクイズへ