こんにちはフロントエンドエンジニアのまさにょんです!
今回は、DBにおけるトランザクション・コミット・ロールバックとは何か、意味が初心者でもわかるように解説します。
目次
トランザクション・コミット・ロールバックとは?
「トランザクション」「コミット」「ロールバック」の3点セットはデータベースの話でよく出てきます。
具体的なコマンド操作については触れずに、概念の理解を深めましょう。
トランザクション(Transaction)とは?
トランザクションは「特定の処理の開始から、特定の処理の終了までがワンセット」な処理単位です。
つまり、トランザクション処理は「処理のハッピーセット」(処理のまとまったセット)なのです!
そして「トランザクション処理」と言う「処理のワンセット」(処理のハッピーセット)は、
最終的に「COMMIT(コミット)」か「ROLLBACK(ロールバック)」で終了します。
コミットは一連の処理をまとめて確定し、ロールバックはまとめて処理を取り消すコマンドです。
細かい点は、この後、それぞれ解説します。
コミット(COMMIT)とは?
トランザクション処理の結果を確定させる(処理を反映させる)ことを「コミット (COMMIT)」と言います。
先述のとおり、トランザクション処理は「特定の処理の開始から、特定の処理の終了までがワンセット」な処理です。
そしてトランザクション処理は、コミットで処理を完了させる(反映させる)か、
ロールバックで処理を取り消す(処理の開始まで戻る)かのどちらかです。
コミットされるまでは、処理は反映されません。
コミットされて初めて、トランザクション処理の結果が本体に反映されるのです。
ちなみに、Gitのコミットも処理をブランチに反映させるコマンドなので、同じ考え方ですね。
ロールバック (Rollback)とは?
ロールバック (Rollback)とは、トランザクションの開始地点まで処理結果を取り消して、戻ることです。
少しだけ細かく言うと、トランザクション処理中に何らかの理由によりエラーが発生した時に、
途中までの処理結果を捨てて(中断して)、トランザクション開始前の状態にDBを戻す処理のことです。
処理がちゃんと最後まで完了しないで、できた中途半端な結果(エラー)をDBに反映させると、今度はDBがエラーを起こします。
こういった2次被害を防ぐためにロールバック (Rollback)はあります。
まとめ
トランザクション処理を実施した際に、
トランザクション処理の結果を確定させるのが「コミット」(結果の反映)
やりかけの処理結果を捨てて、処理開始前の状態に戻すのが「ロールバック」(巻き戻し)
です。
つまり、処理が成功したら「コミット」で処理を反映させる、処理が失敗したら「ロールバック」で処理を戻す。
と言うことです。
上記の「トランザクション」「コミット」「ロールバック」の3点セットの関係性・概念を理解しておきましょう。
DB・SQL関連書籍
参考・引用
- 【初級】新人SEのためのSQLの基礎 第5回 トランザクションとカーソルにまつわる注意点
- ロールバック (rollback)とは
- ロールバック とは? – Insider’s Computer Dictionary – ITmedia