mysql - 当我执行 'lock tables [table_name] write' 时出现“元数据锁”

标签 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 子句一样工作。
不过好像不是。。

现在我知道错了吗?

最佳答案

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

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

WRITE lock:

  • Only the session that holds the lock can access the table. No other session can access it until the lock is released.

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

关于mysql - 当我执行 'lock tables [table_name] write' 时出现“元数据锁”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54331479/

相关文章:

c++ - 根据条件创建 shared_lock 或 unique_lock

mysql - 将 session ID 存储在 codeigniter 的另一个表中

mysql - 计算 Oracle 表中特定值之间模式的出现次数

php - 更新 Doctrine 中的总关系计数器

java - @Transactional 不适用于 readOnly = true

php - 使用 CURL 发布方法的 Google 翻译 API

c# - 多线程,通用锁

mysql - c语言与mysql(如何将mySQL数据库包含到程序中)

hibernate - 为什么 Hibernate 只在事务内自动刷新?

t-sql - 分离数据库/脱机失败