9

MySQLのテーブルロックについて少し好奇心があります。

2つのテーブルをロックしたいとします。私はこのコマンドを実行します:

LOCK TABLES table1 WRITE, table2 WRITE

次に、以下を実行して、テーブルが実際にロックされているかどうかを確認しました。

SHOW OPEN TABLES IN mydatabase WHERE In_use > 0

たとえば、2つのロックコマンドを連続して実行すると、次のようになります。

LOCK TABLES table1 WRITE
LOCK TABLES table2 WRITE

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

ありがとう

4

2 に答える 2

10

LOCK TABLESはトランザクションセーフではなく、テーブルをロックしようとする前にアクティブなトランザクションを暗黙的にコミットします。

したがって、最初のケースでは、2つのテーブルをロックしたままのトランザクションが1つあり、2番目のケースでは、LOCK TABLES table1 WRITEコミットされているため、1つだけです。

于 2013-02-08T16:24:44.153 に答える
0

テーブルのロックは、指定されたロックを実行する前に、まず現在のセッションによってロックされているすべてのテーブルのロックを解除します。したがって、テーブル2をロックするための呼び出しは、テーブル1のロックを解除することです。

于 2015-11-19T23:09:57.587 に答える