栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

事务的隔离级别和脏读、不可重复读、幻读

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

事务的隔离级别和脏读、不可重复读、幻读

经常看到网上关于脏读一些问答,很少有回答的很全面的。因此参照网上的资料,做了下简单的总结[搬运了一些大佬的文章链接]。

问题:存在两个事务,A事务更改数据在未提交之前,B事务能否读取到A修改过的数据?网上看到的答案说是不可以,也有说可以的。

答案:真正的答案是可能读取的到,也可能读取不到。【真是这样,因为少了个大前提!】

这是因为有个大的前提条件,就是事务的隔离级别!

MySQL默认的事务隔离级别是可重复读,为啥?相关说明可以看下这篇文章:【原创】互联网项目中mysql应该选什么事务隔离级别 - 孤独烟 - 博客园

事务的隔离级别:

SQL 标准定义了四种隔离级别,MySQL 全都支持。这四种隔离级别分别是:

  1. 读未提交(READ UNCOMMITTED)
  2. 读提交 (READ COMMITTED)
  3. 可重复读 (REPEATABLE READ)
  4. 串行化 (SERIALIZABLE)

不同隔离级别是否能出现脏读、不可重复读、幻读,可以参照下面这个表格: 

 关于隔离级别详细讲解,看这一篇文章就够了,写的挺好。文章内有一些小差错,可以看下文章下面的评论做甄别。大体上写的挺不错的。文章链接:MySQL事务隔离级别和实现原理(看这一篇文章就够了!) - 知乎

脏读、不可重复读、幻读:

关于这几个的定义及解释,网上的资料可是太多了,我就不一一搬运了。其实这三种现象都是并发读写导致的,查看了很多大佬的文章,觉的下面这篇文章够细致通俗。大家可以学习一下。文章链接:大白话讲解脏写、脏读、不可重复读和幻读 - 知乎

但是不可重复读和幻读之间的区分界限并不是特别明显,看了很多资料还是会感觉它们之间很像。它们之间的区别到底在哪呢?

引用网友的一个说法,供大家参考。如下:

“不可重复读”和“幻读”都是读的过程中数据前后不一致,只是前者侧重于修改,后者侧重于增删。个人认为,严格来讲“幻读”可以被称为“不可重复读”的一种特殊情况,没错的。但是从数据库管理的角度来看二者是有区别的。解决“不可重复读”只要加行级锁就可以了。而解决“幻读”则需要加表级锁,或者采用其他更复杂的技术,总之代价要大许多。这是搞数据库的那帮家伙非要把这两者区分开的动机吧。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/271404.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号