'metadatalock' 在我 'lock tables [table_name] write' 时发生
'metadatalock' occured when I did 'lock tables [table_name] write'
我像下面那样做了
-- 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.
“访问”在此上下文中表示读取或写入。
我像下面那样做了
-- 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.
“访问”在此上下文中表示读取或写入。