更新ピットギャップギャップのためのMySQLはロックに遭遇しました

1.どのようなタイプのロックギャップ

(1)インデックスレコードとの間、またはインデックスが、ロックまたはインデックス後間隔になるまで、ギャップロックです。例えば:

SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE;

 

かかわらず、テーブル内のデータのこのデータは、これがSQLトランザクションC1 = 15を挿入しようとする試みを防止するがC1である= 15ので、もしC1 = 10およびC2 = 20は、ロックとの間のギャップを追加しました。

(2)ギャップロックは、インデックス、インデックス、インデックス又はヌル複数をロックすることができます。

(3)ギャップロックと同時実行性能のトレードオフ、それは、特定の分離レベルで使用されています。

 

ギャップロックギャップが存在するであろう2、

 一意のインデックスを持つデータの唯一のクエリ行、および隙間なくロック。例えば:

SELECT * 子供FROM WHERE ID = 100 ;

IDは唯一の指標であれば、ギャップロックを生成しない、インデックスIDまたはIDをインデックスのみではないではない場合、ギャップはロックを有することになります。

競合するロックが異なるトランザクションによってギャップに保持させることができるようにしても、ここで注目すべきです。トランザクションBが同じギャップに排他ギャップロック(ギャップXロック)を保持しながら、例えば、トランザクションAがギャップの共有ギャップロック(隙間Sロック)を保持することができます。競合ギャップロックが許可されている理由は、レコードがインデックスから削除された場合、別のトランザクションによって、レコードに開催されたギャップロックをマージしなければならないということです。

例えば、トランザクションAはギャップ上に共有ロックを有し、Bトランザクションは同じギャップに排他ロックを有しています。

 

おすすめ

転載: www.cnblogs.com/BonnieWss/p/11417944.html