mysql不能在更新一个表的同时查询同样的一张表

来源:互联网 发布:ica 四阶统计量算法 编辑:程序博客网 时间:2024/05/16 08:41

记得在看高性能mysql的时候,说过mysql不能在更新一个表的同时查询同一张表,今天看了一个stackoverflow的求助帖,突然间想起了这件事情。

http://stackoverflow.com/questions/20786453/mysql-update-a-table-and-select-from-the-same-table-in-a-subquery

stackoverflow帖子地址

对于这个问题,个人认为是mysql读写锁锁定的问题

网络上关于读写锁的解释:

读锁:

若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

写锁:

若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。

加了共享锁的对象,可以继续加共享锁,不能再加排它锁。加了排它锁后,不能再加任何锁。

那么说我在更新一个表的时候,我锁定了一行,这一行我是不能加读锁的了,所以这时我查询这张表,就会出现这种问题。

这里面还有许多需要细化分析的地方,比方说mvcc等,还需要再看一下

http://www.xiangyu123.com/1059.html

关于mysql锁的一篇文章


0 0
原创粉丝点击