【DB】トランザクション

DBの勉強の続きをしていきます!!
今回のテーマはトランザクションについて!!



トランザクションとは

[DCL(データ制御言語)]でSQL構文について触れていますが、トランザクションとは複数の処理を、一つの処理単位にまとめているものです。複数の処理が纏めて実施されないと整合性が取れない場合にトランザクションとして一連の処理へ設定します。例えば、Aさんが所属する会社が給料をAさんの口座に振り込む場合、会社の口座データとAさんの口座データの更新が全て完了するまではトランザクションが終了してはいけません。




ACID

トランザクションには、4つの特性「ACID」を持たせなければいけません。



①A:Atomicity (原始性)
トランザクションは、完全に終了するか(COMMIT)、元の状態に戻す(ROLLBACK)の状態でならない。 途中で終わる状態にはなりません。

②C:Consistency(一貫性)
トランザクションはデータの整合性を保ち、一貫したデータを持たなければならない。

③I:Isolation(独立性)
トランザクションはそれぞれ独立して実行できなければならない。複数のトランザクションが同時に実行されていても影響を受けずに実行できなければいけません。

④D:Durability(耐久性)
トランザクションの結果は、障害が発生しても回復できなければならない。




ロック

ロックは、データの一貫性や独立性を保つために、データに対して制限をかけることです。ロックには、共有ロック・占有ロックは存在し、ロックの順番に気を付けないとデッドロックが発生してしまいます。



共有ロック
データの参照時に使用するロックで、他のトランザクションからも参照は許可します。

占有ロック
データを更新するとき使用するロックで、他のトランザクションからは参照も更新もできません。

デッドロック
複数のトランザクションが互いに必要なデータをロックしているため、処理が先に進まないことです。




分離レベル

トランザクションの独立性には、分離レベルが設定できます。完全に独立性を満たすと、一度に1つのトランザクションしか実行できないため、分離レベル設定します。



①READ UNCOMMITTED
他のトランザクションで処理されている、コミットされていないデータも読み取ります。

②READ COMMITTED
他のトランザクションで処理されている、コミットされたデータのみ読み取ります。

③REPEATABLE READ
トランザクション実行中は、読み取り対象データはトランザクション中に他のトランザクションから変更されないことを保証します。

④SERIALIZABLE
トランザクション実行中は、参照したテーブルに対して他のトランザクションが追加・変更・削除のすべてができなくなります。



今回は以上!!




【ブログを始めるなら】

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA