2012-08-29 100 views
1

根据MySQL文档,如果任何会话持有表的读取锁定,则另一个会话将为同一个表请求一个写入锁定,必须给出写入锁定以及读取锁定锁等待。MySQL的写入锁定应该暂停读取锁定

我试过了,从两个控制台(Windows 7)连接到MySQL服务器。从第一个控制台锁定表A(读取锁定),然后尝试从第二个控制台锁定同一个表(写入锁定),但第二个控制台只是等待,直到第一个锁定释放。

谁是错的:我还是文档? (MySQL服务器版本5.5.27)

从MySQL官方文档的引文:

“WRITE锁通常具有更高的优先级比读锁,以确保 更新是尽快处理此方法。如果一个 会话获得一个READ锁定,然后另一个会话请求一个WRITE 锁定,则后续的READ锁定请求会一直等到 请求WRITE锁定的会话获得锁定并释放它。

+0

答案是在文档中,写入锁将优先于SUBSEQUENT读取锁... – whosrdaddy

回答

0

这是写在那里:

这意味着,如果一个会话获得READ锁,然后另一个会话请求WRITE锁,随后 READ锁请求等待,直到要求写锁定的会话有获得锁并释放它。

已经获得的READ锁不会在操作中被破坏。这会造成严重破坏。这是需要等待的后续请求

+0

明白了,谢谢。 – Graduate

0

的关键词是subsequent READ lock requests随后。我认为这是说现有的READ锁将而不是暂停,但实际上WRITE锁有效时发生的READ锁将被延迟。所以我认为文档是正确的。