Mysqlをinnodbにて運用を行っています。
複合主キーが設定されたテーブルのロック範囲についていくつか質問があります。
以下のようなテーブルでID1,ID2が主キーの場合
ID1 | ID2 | NAME |
---|---|---|
1 | 1 | NAME1_1 |
1 | 2 | NAME1_2 |
1 | 3 | NAME1_3 |
1 | 10 | NAME1_10 |
2 | 1 | NAME2_1 |
2 | 2 | NAME2_2 |
2 | 3 | NAME2_3 |
2 | 10 | NAME2_10 |
10 | 10 | NAME10_10 |
■ WHERE ID1 = 1 AND ID2 = 1
上記の場合は、 存在するレコード 1件に対してのロックなので
単純に1レコードに対してロックがかかる。
ということで問題ないでしょうか?
■ WHERE ID1 = 1 AND ID2 in (1,10)
上記の場合は、ID1=1のID2=1,ID2=10にレコードロックがかかり
ID1=1のID2=2,ID2=3に対してギャップロックがかかり
ID1のID11に対してネクストキーロックがかかる。
ID1の1以外のデータに対してはロックがかからない
ということでしょうか?
それとも単純に
ID1=1のID2=1,ID2=10の2レコードにレコードロックがかかるだけなのでしょうか。
単キーのロック範囲の説明の記事はよく見かけたのですが、複合キーでの情報が
みつけられなかったので質問させていただきました。
分かりにくいですがよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー