人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQL で、変更を加える(insert,update,delete)などのSQL文発行のときには、明示的に指示しなくてもテーブルはロックされるのでしょうか? というかSQL文がキューにのるだけだというような話を聞きました。実際はどうなんでしょうか?


●質問者: kaiketsu
●カテゴリ:コンピュータ インターネット
✍キーワード:DELETE MySQL SQL にの キュー
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● Yota
●23ポイント

ストレージエンジンによって話が違ってきますが、

http://dev.mysql.com/doc/refman/4.1/ja/internal-locking.html

基本的にMyISAMではテーブル単位、InnoDBでは行単位のロックがかかります。

http://dev.mysql.com/doc/refman/4.1/ja/innodb-locks-set.html

書き込みロックキューについては、こちらで解説されています。

http://www.buena-idea.net/~hironobu/mysql/m-2-10.html


2 ● いわわ
●23ポイント

http://www.buena-idea.net/~hironobu/mysql/m-2-10.html

ロックされるそうです。


3 ● chuken_kenkou
●22ポイント

insert、update、deleteだけでなく、select時も、テーブルに関しては共用可能なロックが内部的には掛かっています。

そうしないと、操作中の表が、突然、drop tableされたりということが起こります。

排他制御をかける資源には、単位があります。表に強いロックを掛けると、下位資源のページや行にはロックする必要がありません。

これが、LOCK TABLEの動きです。

一方、insertやselectなどの時は、表には共用可能なロックを掛け、ページや行に対しても排他制御が行なわれます。

上位資源の表に対して、共用可能なロックを掛けるのは、insertやselect中に、表が削除されたりすることを防止するためです。


ページ


>SQL文がキューにのるだけ

どういう意味でしょうか?

排他制御による待ちは、キュー管理されていますが?

http://q.hatena.ne.jp/


4 ● b-wind
●22ポイント
明示的に指示しなくてもテーブルはロックされるのでしょうか?

テーブル型と設定にもよるが、デフォルトではされない。


SQL文がキューにのるだけだ

INSERT DELAYED 構文でも使わない限りそんなことにはならない。

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.4.3.2 INSERT DELAYED 構文


このあたり MySQL はバージョンとテーブル型によって挙動が違うので、明示しないと議論になりませんよ。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ