我做到了以下
-- connection 1
START TRANSACTION;
LOCK TABLES [table_name] WRITE;
-- connection 2
START TRANSACTION;
SELECT * FROM [table_name]; -- waiting for table metadata lock
我不了解上述情况。
我以为WRITE LOCK不会阻止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并没有像您看到的那样。
而且我认为WRITE LOCK也可以像UPDATE子句一样工作。
但这似乎不是。
现在我知道有什么问题吗?
答案 0 :(得分:2)
写锁不像行级锁那样工作。
https://dev.mysql.com/doc/refman/8.0/en/lock-tables.html说:
WRITE
锁定:
- 只有持有锁的会话才能访问该表。在释放锁之前,没有其他会话可以访问它。
在此上下文中,“访问”表示读或写。