InnoDBではデフォルトでトランザクション分離レベルが
REPEATABLE READになっています。
REPEATABLE READの場合は
トランザクション開始後の最初のクエリの時点のスナップショットを参照するします。
たとえば
tags tableというものがあるとします。
このテーブルに二つのターミナルを使って
トランザクションでデータを挿入します。
1.左と右でトランザクション開始(begin
)
2.スナップショットを取得するため、両方でselect
を実行
3.左側で value 20を代入し、commit
を行うと
右側のターミナルでは name:20
の値を取得することができません。
解決方法
for update
select ... for update
を使うことで読み取ることができます。
LOCK IN SHARE MODE
select ... OCK IN SHARE MODE
を使うことで読み取ることができます。
このモードは読み取ることができるすべての行にロックをかけて、
他の