2013-02-08 18 views
9

私は、MySQLのテーブルロックに関する小さな好奇心があります。MySQL複数のテーブルロック

私は2つのテーブルをロックしたいと言います。

LOCK TABLES table1 WRITE, table2 WRITE 

とテーブルが実際に実行することで、ロックされている場合は、私がチェック::私は例えばsequentitally 2つのロックコマンドを実行する場合、私はそのカントー気づいた

SHOW OPEN TABLES IN mydatabase WHERE In_use > 0 

を:

私は、このコマンドを実行します
LOCK TABLES table1 WRITE 
LOCK TABLES table2 WRITE 

次に、同じコマンドを使用してロックされているテーブルを確認します。table2はロックされているとマークされています。なぜこれはそうですか?

おかげ

答えて

7

LOCK TABLESはトランザクションセーフではなく、暗黙的にテーブルをロックしようとする前に、すべてのアクティブなトランザクションをコミットします。 LOCK TABLES table1 WRITEが最初に実行する前に、現在のセッションによってロックされたすべてのテーブルのロックを解除します

0

ロックテーブルをコミットされていたので

だから、最初のケースでは、あなたは、1秒間だけで、ロックされた2つのテーブルを保持する1つのトランザクションを持っています指定されたロックロックテーブル2を呼び出すと、テーブル1のロックが解除されます。