トランザクションってなに?
ACID特性とは?
わかりやすく教えて欲しい!
こういった疑問にこたえます。
エンジニアの僕がわかりやすく解説します。
トランザクションとは?
トランザクションとは、セットで実行されるべき1つ以上の更新処理の集まりのことです。
テーブルに対する更新はINSERT、DELETE、UPDATEなどがあります。
更新は一般的に1回で終わるものではなく、複数の操作ををまとめて連続的に実行することが多いです。
この複数の操作を意味的にひとまとまりにしたもがトランザクションだと思ってください。
トランザクションを使用すれば、データの更新処理の確定や取り消しなどを管理することができます。
トランザクションの処理を終わらせるコマンドとしてCOMMIT(処理の確定)とROLLBACK(処理の取り消し)があります。
トランザクションを作る方法
DBMS内でトランザクションを作るには、次のようなSQLを実行します。
BEGIN TRANSACTION;
DML①;
DML②;
DML③;
・
・
COMMIT;
トランザクションを開始するBEGIN TRANSACTIONと処理を確定させるCOMMITの間にDMLを記述します。
トランザクションの開始文はDBMSによって書き方が異なる場合があるので使用しているRDBMSに合わせて書いてください。
トランザクションを終わらせるコマンドは2つあります。
- COMMIT(処理の確定)
- ROLLBACK(処理の取り消し)
トランザクション処理の確定
COMMITを行うと開始文以降に記述した DMLの内容が反映されトランザクションを終了します。
一度コミットした処理は開始前の状態に戻すことはできないのでコミットする前は確定して良いか確認しましょう。
トランザクション処理の取り消し
ROLLBACKはトランザクションに含まれていた変更を全て破棄し、トランザクションを終了するコマンドです。
ロールバックしたらデータベースの状態はトランザクションを開始する前の状態に戻ります。
ACID特性とは?
DBMSのトランザクションには、原子性(Atomicity)、一貫性(Consistency)、独立性(Isolation)、永続性(Durability)という守らなければならない約束事があります。
これら4つの頭文字を取ってACID特性と言います。
原子性(Atomicity)
トランザクションが終わったとき、そこに含まれていた更新処理は全て実行されるか全て実行されないかのどちらかで終わることを保証する性質のことです。
トランザクションが中途半端な終わり方をすることがあってはならないということです。
一貫性(Consistency)
トランザクションに含まれる処理はデータベースにあらかじめ設定された制約を満たすという性質です。
例えば、NOT NULL制約を付加された列をNULLに更新したり主キー制約違反のレコードを挿入するようなSQL文はエラーになり実行できません。
違法のSQLは一文単位で実行が取り消され、実行されなかったのと同じことになります。
独立性(Isolation)
トランザクション同士がお互いに干渉を受けないことを保証する性質です。
複数のトランザクションを同時に実行した場合と、順番に実行した場合の結果が等しくなることを保証します。
永続性(Durability)
トランザクションが終了したら、その時点でのデータの状態が保存されることを保証する性質です。
システム障害が発生しデータが失われたとしても何らかの方法で復旧させる手段を持たなければなりません。
データベースのトランザクションとは?まとめ
解説の内容をまとめます。
- トランザクションとはセットで実行されるべき1つ以上の更新処理の集まりのこと
- BEGIN TRANSACTIONでトランザクションを開始する
- COMMIT(処理の確定)かROLLBACK(処理の取り消し)でトランザクションを終了する
- ACID特性はDBMSのトランザクションが守らなければならない約束事
以上、お疲れ様でした。
コメント