【发布时间】: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