【问题标题】:'metadatalock' occured when I did 'lock tables [table_name] write'当我执行“锁定表 [table_name] 写入”时发生了“元数据锁”
【发布时间】:2019-01-23 16:16:55
【问题描述】:

我是这样做的

-- 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 子句一样工作。
不过好像没有。。

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

【问题讨论】:

  • 您是否查看过 SHOW ENGINE INNODB STATUS 的输出;在那里您可以找到更多详细信息
  • 一般来说,LOCK TABLES 不应该与 InnoDB 一起使用。你为什么用它?
  • 我只是在研究 MySQL Lock。我不打算用这个

标签: mysql transactions locking mariadb


【解决方案1】:

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

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

WRITE锁:

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

在此上下文中的“访问”意味着读取或写入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    相关资源
    最近更新 更多