MySQL

MySQLのトランザクションとか分離レベルメモ

 

@see https://www.websec-room.com/2015/11/17/2356

わかりやすくまとまっています(ㆁᴗㆁ✿)

 

また、トランザクション分離レベルは以下のようになります(MySQL)。

ダーティーリード ファジーリード ファントムリード
READ UNCOMMITED 起きる 起きる 起きる
READ COMMITTED 起きない 起きる 起きる
REPEATABLE READ 起きない 起きない 起きない
SERIALIZABLE 起きない 起きない 起きない

※ REPEATABLE READ のファントムリードが起きないのは、MySQL の仕様
※ MySQL のデフォルトトランザクション分離レベルは REPEATABLE READ
※ ANSI/ISO SQL の既定では、REPEATABLE READ でファントムリードは起きる

InnoDB+REPEATABLE READの場合はファントムリードは起きない。

 

上記にはないけれど、ロールバック後のリトライ処理も必要

 

ACID特性

@see http://d.hatena.ne.jp/fat47/20140212/1392171784

トランザクション処理に求められる4つの特性です。

原子性 (Atomicity)

トランザクションに含まれる手順が「すべて実行されるか」「すべてされないか」のどちらかになる性質。

一貫性 (Consistency)

どんな状況でもトランザクション前後でデータの整合性が矛盾なく保たれる性質。

分離性 (Isolation)

トランザクション実行中は、処理途中のデータは外部から隠蔽されて他の処理に影響を与えない性質。

永続性 (Durability)

トランザクションが完了したら、システムがクラッシュしてもデータが消失することがない性質。

ダーティリード、ファジーリード、ファントムリードなど解説もわかりやすい。

@see http://d.hatena.ne.jp/fat47/20140212/1392171784

分離レベルに関しての選択として、

InnoDB + REPEATABLE READ

でいいはず。

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)