MySQL的写锁应该暂停读锁

时间:2012-08-29 21:38:18

标签: mysql locking

根据MySQL文档,如果任何会话持有表的读锁,则另一个会话请求同一个表的写锁定,必须给出写锁定并且读锁定等待。

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

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

来自MySQL官方文档的引用:

  

“WRITE锁通常具有比READ锁更高的优先级以确保   尽快处理更新。这意味着,如果一个   session获取READ锁,然后另一个会话请求WRITE   锁定,后续READ锁定请求等待会话   要求WRITE锁已获得锁定并将其释放。“

2 个答案:

答案 0 :(得分:0)

关键字是subsequent READ lock requests中的后续。我认为这是说现有的READ锁将暂停,而是在WRITE锁定生效时发生的READ锁定将被延迟。所以我认为文档是对的。

答案 1 :(得分:0)

它写在那里:

  

这意味着如果一个会话获得READ锁定,然后另一个会话请求WRITE锁定,后续 READ锁定请求将等待,直到请求WRITE锁定的会话获得锁定并将其释放。

已经获得的READ锁定不会在运行中断。那会造成严重破坏。这是后续请求等待。