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系 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

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