MySQL 不同隔离级别加锁情况:报错  -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

MySQL 不同隔离级别加锁情况:报错 

对于MySQL 各种隔离级别的加锁情况分析的博客很多 但对 read uncommitted 这个级别的加锁情况分析总是一笔带过。 甚至美团的博客简述 read uncommitted 隔离级别不加任何锁。 但我分析下来确实是加锁的,比如t1,t2两个事务,t1 更新一条记录,t2 更新同一条记录,两者事务都没有提交的情况下,t1事务加的是 X 行级排他锁,t2事务会阻塞,但是对于加锁的时长有的博客说是跟新完即释放排他锁,如果是这样的话,这也就是说其实t2事务是可以更新的不会阻塞,但其实不然,所以我大胆猜测t1事务的行级锁会在事务提交时释放。但是如果行级排它锁到事务提交时释放的话,为什么t2事务可以读到在t1 事务没有释放排他锁时,可以读到t1事务更改后的值呢。 请大神解释下,我很困惑,谢谢了!

展开
收起
kun坤 2020-06-08 16:19:48 423 0
1 条回答
写回答
取消 提交回答
  • 找到答案了:

    `` 
    对应翻译 
    

      在READ UNCOMMITTED级别运行的事务不会发出共享锁,以防止其他事务修改当前事务读取的数据。读取UNCOMMITTED事务也不被排除锁阻止,这将阻止当前事务读取已被修改但未被其他事务提交的行。设置此选项时,可以读取未提交的修改,称为脏读。可以更改数据中的值,并且行可以在事务结束之前在数据集中显示或消失。此选项与在事务中的所有SELECT语句中的所有表上设置NOLOCK具有相同的效果。这是隔离级别的最小限制

    
    
    2020-06-08 16:19:59
    赞同 展开评论 打赏
问答排行榜
最热
最新
相关电子书
更多
阿里云MySQL云数据库产品体系介绍
立即下载
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL
立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL
立即下载