更新を 1 つのトランザクションとして確定する正しい順番は?
正答
- UPDATE accounts SET balance = balance - 100 WHERE id = 1; → BEGIN; → COMMIT;
- BEGIN; → UPDATE accounts SET balance = balance - 100 WHERE id = 1; → COMMIT;
- BEGIN; → COMMIT; → UPDATE accounts SET balance = balance - 100 WHERE id = 1;
- COMMIT; → UPDATE accounts SET balance = balance - 100 WHERE id = 1; → BEGIN;
解説
トランザクションは BEGIN で開始し、その中で UPDATE などの変更を実行し、COMMIT で確定する。COMMIT するまでは変更は確定しておらず、問題があれば ROLLBACK で BEGIN 時点の状態に戻せる。COMMIT を先に書くとまだ開始していないトランザクションを確定しようとしてエラーになる。複数の UPDATE をまとめて成功か失敗かのどちらかにしたいときにこの形を使う。
参考: www.sqlite.org
この問題を含む SQL のテストを制限時間つきで解く
SQLクイズへ