根据MySQL文档,如果任何会话持有表的读锁,则另一个会话请求同一个表的写锁定,必须给出写锁定并且读锁定等待。
我尝试过,从两个控制台(Windows 7)连接到MySQL服务器。从第一个控制台锁定表A(读取锁定),然后尝试从第二个控制台锁定同一个表(写锁定),但第二个控制台只等到第一个锁定释放。
谁错了:我还是文件? (MySQL服务器版本5.5.27)
来自MySQL官方文档的引用:
“WRITE锁通常具有比READ锁更高的优先级以确保 尽快处理更新。这意味着,如果一个 session获取READ锁,然后另一个会话请求WRITE 锁定,后续READ锁定请求等待会话 要求WRITE锁已获得锁定并将其释放。“
答案 0 :(得分:0)
关键字是subsequent READ lock requests
中的后续。我认为这是说现有的READ锁将不暂停,而是在WRITE锁定生效时发生的READ锁定将被延迟。所以我认为文档是对的。
答案 1 :(得分:0)
它写在那里:
这意味着如果一个会话获得READ锁定,然后另一个会话请求WRITE锁定,后续 READ锁定请求将等待,直到请求WRITE锁定的会话获得锁定并将其释放。
已经获得的READ锁定不会在运行中断。那会造成严重破坏。这是后续请求等待。