発生している問題・エラーメッセージ
以下のようなテーブルとレコードがあリ、iD1と2のレコードにのみ行ロックをかけたいのですが、
SELECT FOR UPDATEのカラム指定によってはテーブルロックとなる場合があります。
Userテーブル
カラム | 型 | index | その他 |
---|---|---|---|
id | int(11) | primary key | auto_increment |
name | varchar(255) | ||
varchar(255) | index |
レコード
id | name | |
---|---|---|
1 | 太郎 | test1@example.com |
2 | 二郎 | test2@example.com |
3 | 花子 | test3@example.com |
4 | 洋子 | test4@example.com |
試したこと
抽出カラムをアスタリスクにすると、想定通りID=1,2のみ行ロックをとることができます。
sql
1SELECT * FROM user WHERE id IN (1, 2) FOR UPDATE; => 行ロック
しかし、抽出カラムをIDのみにすると、テーブルロックとなってしまい、ID3,4の更新も出来なくなってしまいます。
sql
1SELECT id FROM user WHERE id IN (1, 2) FOR UPDATE; => テーブルロック
なぜID指定のみだとテーブルロックになってしまうのかが疑問なのですが、どなたかご教示いただけますでしょうか。
回答1件
あなたの回答
tips
プレビュー