トランザクションを終了する条件はどれですか。
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が確定