トランザクションはRDBに対するひとかたまりの操作です。だから本来入れ子も何もなく、始まりと終わりが一個ずつあるだけです。以上。 …で終わらせられないのは、それでもネストが必要になる場面があるからですね。 ありがちなのは、トランザクション開始終了処理まで込みのアプリケーション側関数・メソッドやストアドプロシージャの存在。こうした関数を、まあ関数ですから部品的に扱おうとするとトランザクションが開始した文脈下でこうした関数が呼び出されて入れ子のサブトランザクションスタート、ってことになったりします。 サブトランザクションのコミットは問題ない BEGIN TRANSACTION; INSERT ... 'A'); BEGIN TRANSACTION; INSERT ... 'B'); COMMIT TRANSACTION; INSERT ... 'C'); COMMIT TRANSACTION;