对于MySQL 各种隔离级别的加锁情况分析的博客很多 但对 read uncommitted 这个级别的加锁情况分析总是一笔带过。 甚至美团的博客简述 read uncommitted 隔离级别不加任何锁。 但我分析下来确实是加锁的,比如t1,t2两个事务,t1 更新一条记录,t2 更新同一条记录,两者事务都没有提交的情况下,t1事务加的是 X 行级排他锁,t2事务会阻塞,但是对于加锁的时长有的博客说是跟新完即释放排他锁,如果是这样的话,这也就是说其实t2事务是可以更新的不会阻塞,但其实不然,所以我大胆猜测t1事务的行级锁会在事务提交时释放。但是如果行级排它锁到事务提交时释放的话,为什么t2事务可以读到在t1 事务没有释放排他锁时,可以读到t1事务更改后的值呢。 请大神解释下,我很困惑,谢谢了!
找到答案了:
``
对应翻译
在READ UNCOMMITTED级别运行的事务不会发出共享锁,以防止其他事务修改当前事务读取的数据。读取UNCOMMITTED事务也不被排除锁阻止,这将阻止当前事务读取已被修改但未被其他事务提交的行。设置此选项时,可以读取未提交的修改,称为脏读。可以更改数据中的值,并且行可以在事务结束之前在数据集中显示或消失。此选项与在事务中的所有SELECT语句中的所有表上设置NOLOCK具有相同的效果。这是隔离级别的最小限制
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。