当我执行“锁定表[table_name]写入”时发生“ metadatalock”

时间:2019-01-23 16:16:55

标签: mysql transactions locking mariadb

我做到了以下

-- 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子句一样工作。
但这似乎不是。

现在我知道有什么问题吗?

1 个答案:

答案 0 :(得分:2)

写锁不像行级锁那样工作。

https://dev.mysql.com/doc/refman/8.0/en/lock-tables.html说:

  

WRITE锁定:

     
      
  • 只有持有锁的会话才能访问该表。在释放锁之前,没有其他会话可以访问它。
  •   

在此上下文中,“访问”表示读或写。