発生している問題・エラーメッセージ
以下のようなテーブルとレコードがあリ、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指定のみだとテーブルロックになってしまうのかが疑問なのですが、どなたかご教示いただけますでしょうか。
> iD1と2のレコードにのみ行ロックをかけたいのですが
どういった目的でロックが必要なのでしょうか?
回答1件
あなたの回答
tips
プレビュー