SQL

SQL トランザクション memo

More than 1 year has passed since last update.

正確なデータ操作を脅かすもの

1.予期しない処理中断
2.同時操作

トランザクション

SQL文送信の際、複数のSQL文を1つのかたまりとして送信するように指示することができる。
このひとかたまりをトランザクションと呼ぶ。

DBMSはトランザクションを次のように扱う
A.トランザクションの途中で、処理が中断されないようにする。
B.トランザクションの途中に、他の人の処理が割り込めないようにする。

A.トランザクションの途中で、処理が中断されないようにする。

ではトランザクションの中にある複数のSQL文について、必ず

「すべて実行が完了」
「1つも実行されない」

のどちらかの状態になるように制御する。
このようにDBMSによって複数のSQL文が1まとまりのものとして扱われる性質のことを
トランザクションの原子性という。

トランザクションの指示

・BEGIN
開始の指示。この指示以降を1つのトランザクションとする。

・COMMIT
終了の指示。この指示までを1つのトランザクションとし、変更を確定とする。

・ROLLBACK
終了の指示。この指示までを1つのトランザクションとし、変更を取り消しする。

自動コミットモードの解除

MySQL
SET AUTOCOMMIT=0

B.トランザクションの途中に、他の人の処理が割り込めないようにする。

DBMSはトランザクションを実行する際、他のトランザクションから影響を受けないように分離して実行する。
つまり同時進行してもあたかも単独で実行しているのと同じ結果になるように制御する。

DBMSに対して複数の利用者が同時に処理を要求することで発生する副作用

  • ダーティーリード
  • 反復不能読み取り
  • ファントムリード

これら懸念されている副作用はトランザクションによって解決できる。
なぜなら、DBMSは分離性を維持するためにB.の制御を行っているからである。

DBMSはこの仕組みを使うためにロックという機能を使用する。