私は以下のようにそれをしました
-- connection 1
START TRANSACTION;
LOCK TABLES [table_name] WRITE;
-- connection 2
START TRANSACTION;
SELECT * FROM [table_name]; -- waiting for table metadata lock
上記の状況がわかりません。
WRITELOCKはSELECTクエリを妨げないと思いました。
私が以下のようにしたとき、
-- connection 1
START TRANSACTION;
UPDATE [table_name] SET [column = value] WHERE id = 1;
-- connection 2
START TRANSACTION;
SELECT * FROM [table_name] WHERE id = 1; -- doesn't wait
SELECTはあなたが見たように待ちません。
そして、WRITELOCKもUPDATE句のように機能すると思いました。
しかし、そうではないようです。
今、私は何か間違っていることを知っていますか?
書き込みロックは、行レベルのロックのようには機能しません。
https://dev.mysql.com/doc/refman/8.0/en/lock-tables.htmlによると:
WRITE
ロック:
- ロックを保持しているセッションのみがテーブルにアクセスできます。ロックが解除されるまで、他のセッションはそれにアクセスできません。
このコンテキストでの「アクセス」とは、読み取りまたは書き込みを意味します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加