关于数据库的四种隔离机制的理解

脏读: (读取了未提交的新事物,然后被回滚了)

    事务A读取了事务B中尚未提交的数据。如果事务B回滚,则A读取使用了错误的数据。

不可重复读: (读取了提交的新事物,指更新操作)

      不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。

相信上面那段话很多人都看过,这也是国内帖子最常见的说法,我个人因为这种解释的方法混淆了很久,我觉得这种表述不太直观,不太容易让人理解,原因是,他把主角(我)的视角多次转化了,从我作为一个入侵别人事务的角色,转化成被别人入侵事务的角色。

于是我总结出一下描述。

不管是脏读还是不可重复读,本质上都是一个线程入侵了另一个线程的事务(未提交)。

第一种(脏读),入侵了别人的事务,主要是读这个动作,也是这个隔离机制相对应的读锁的核心概念,记住读就行。再把这个读放回本质上去。那就是我读了一个未提交的事务(一个线程入侵了另一个线程的事务)。

第二种(不可重复读),很多时候被这个读所蒙蔽了,这种情况的重点恰恰是写的本质。也就是我在一个未提交的事务的过程中写了,并且提交了,令对方不可重复读。(这个时候,我们的角色没有改变,一直都是入侵者)

第三种(可重复读),很简单,就是非事件,也就是上读锁和写锁,也就是行锁。

第四种(幻读),他的本质是表级和行级的区别,可以理解为行锁的范围加大版,表级锁,记住这个本质就OK了。

在解释过程中举例当然好,但是我发现很多帖子在举例时,容易忽略角色的问题,导致例子越多,越难懂混淆。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值