2013年07月31日

mysqlのforupdateの挙動

レコードをアップデートする場合、forupdateでselect文を書く事でそのレコードがロックかかる。

「レコードが無い場合はどうなる?」というのが今回の議題。
テーブルロックがかかるのか?それとも行ロックなのか。

インデックスはuserIdに張ってあり、一意で取得できるものとする。

実験結果からすると、
一意で取得できるものだった場合で且つデータが存在しない場合はテーブルロックがかかる。
begin;
select * from table1 where userId = 1 for update;
として、もう一方のinsertを実行しようとすると固まった。

もしもデータが存在した場合(updateを行おうとした場合)は「行ロック」がかかった。

参考サイト1
参考サイト2
ラベル:MySQL
posted by 1.618 at 12:17| Comment(0) | web系 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。