根据MySQL文档,如果任何会话都持有表的读锁,则另一个会话请求同一表的写锁,则必须给出写锁,并等待读锁。
我试过了,从两个控制台(Windows7)连接到MySQL服务器。从第一个控制台锁定表A(读锁),然后尝试从第二个控制台锁定相同的表(写锁),但是第二个控制台只是等待第一个锁释放。
谁错了:我还是文件?(MySQL服务器5.5.27版)
来自MySQL官方文件的引文:
“写锁通常比读锁具有更高的优先级,以确保尽快处理更新。这意味着如果一个会话获得一个读锁,而另一个会话请求一个写锁,则随后的读锁请求等待请求写入锁的会话获得并释放它。”
发布于 2012-08-29 21:41:18
上面写着:
这意味着,如果一个会话获得一个读锁,然后另一个会话请求一个写锁,则随后的读取锁请求等待请求写入锁的会话获得并释放该锁。
已经获得的读锁不会在操作过程中被破坏。那会造成大破坏。等待的是后续请求。
发布于 2012-08-29 21:41:06
关键词是后续 in subsequent READ lock requests。我认为这是说现有的读锁不会被暂停,相反,在写锁生效时发生的读锁将被推迟。所以我觉得医生是对的。
https://stackoverflow.com/questions/12186895
复制相似问题