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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/06/08 11:01:57
  • 終了:2007/06/08 21:50:50

回答(4件)

id:Yota No.1

Yota回答回数453ベストアンサー獲得回数282007/06/08 15:01:56

ポイント23pt

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

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

id:chuken_kenkou No.3

chuken_kenkou回答回数722ベストアンサー獲得回数542007/06/08 16:17:37

ポイント22pt

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

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

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

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

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

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


ページ


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

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

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

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

id:b-wind No.4

b-wind回答回数3344ベストアンサー獲得回数4402007/06/08 21:01:11

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

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


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

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

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


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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません