トランザクションを終了する条件はどれですか。
トランザクションを終了する条件はどれですか。
ACOMMIT✓
BEXIT✓
CROLLBACK(SAVEPOINT句なし)✓
DCREATE✓
EROLLBACK(SAVEPOINT句あり)
解説正答:A・B・C・D
トランザクションが終了する条件は次のとおりです:
- COMMIT文 が正常に実行された
- ROLLBACK文(SAVEPOINT句なし) が正常に実行された
- EXIT文 が正常に実行された(セッション終了に伴う暗黙的なコミット)
- DDL(CREATE/DROP/ALTER 等) が実行された(暗黙的なコミットを伴う)
- DCL(GRANT/REVOKE) が実行された
- クライアントから切断された/障害が発生した
SAVEPOINT句ありのROLLBACK は終了しない:
ROLLBACK TO SAVEPOINT sp1 は、指定したセーブポイントまでの変更を取り消すだけで、トランザクション自体は継続 します。
例:
INSERT INTO emp VALUES (1, '田中');
SAVEPOINT sp1;
INSERT INTO emp VALUES (2, '鈴木');
ROLLBACK TO SAVEPOINT sp1; -- 鈴木のINSERTのみ取り消し、トランザクションは継続中
-- ここでまだ田中のINSERTは確定していない
COMMIT; -- ここでトランザクション終了、田中のINSERTが確定DDL が暗黙的なコミットを伴う点も合わせて押さえておきましょう。