interlude

プログラミングや私的なこと

今更聞けないトランザクションについて

トランザクションとは

複数の処理をひとまとまりとして行うことです。
そもそもtransactionそのものが「処理」という意味だったりします。

例えば
処理1->処理2->処理3->処理4という一連の処理があったとして、
これをトランザクション"A"とします。

1から4まで問題なく終了したところでトランザクション"A"が実行されます。

自分の開発している環境がMySQLなので、MySQLで書くと

BEGIN;←BEGINでトランザクションを開始します。    
処理1  
処理2  
処理3  
処理4  
COMMIT;←COMMITで処理1~4が反映されます。

上記の処理3を実行中にこのトランザクションへアクセスがあっても、COMMITで反映されるまでは後から来たアクセスは実行されません。

この仕組をロックと言います。
ロックには共有ロックと排他ロックの2種類あります。

共有ロック

他のプロセス(レコードへのアクセス)は読み込みはできるが、書き込みができなくなる。

排他ロック

他のプロセス(レコードへのアクセス)は読み込みも書き込みもできない。

まとめ

一連のSQLをBEGIN~COMMITで囲ってあげるとトランザクションになるいうこと。 他にもACID特性とかダーティリードとかファントムとかデータベースは奥深いうえに固い言葉が多いですが、また後日勉強します。