「レコードが無い場合はどうなる?」というのが今回の議題。
テーブルロックがかかるのか?それとも行ロックなのか。
インデックスはuserIdに張ってあり、一意で取得できるものとする。
実験結果からすると、
一意で取得できるものだった場合で且つデータが存在しない場合はテーブルロックがかかる。
begin;
select * from table1 where userId = 1 for update;
として、もう一方のinsertを実行しようとすると固まった。
もしもデータが存在した場合(updateを行おうとした場合)は「行ロック」がかかった。
参考サイト1
参考サイト2
ラベル:MySQL