讲透事务隔离

接下来请大家保持不断深挖,追根究底的好奇心!
事务这个概念,大家很早就接触了,大家都懂得事务的一些基本性质(原子性,隔离性,一致性,持久性),但是一般都不知道这些东西在项目中怎么运用,怎么体现隔离性等,只知其一不知其二,不能把数据库交给我们的功能用到实处,做到优化化,来运用于我们项目,就达不到学以致用的目的。好了,下面就说说事务隔离在项目中运用和具体体现。主要讲解三方面的东西

一、各种隔离级别都是什么意思?

隔离级别哪几种,分别是什么意思,这里说下自己的一些理解

  • 读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看
    (从字面中提交就是事务的提交,所以读未提交就是本事务可以读到未提交的其他事务的修改后的记录,也就是不管哪里修改了该记录,我都能看到修改后的结果,很显然这种隔离级别是最低的。不需要任何的控制就能实现。)

  • 读提交是指,一个事务提交之后,它做的变更才会被其他事务看到。
    (这里字面的意思一样,提交就是事务提交的意思,就是其他事务修改了某条记录,如果我是这个隔离级别(下面有演示,很多人这里不说是自己),我还看不到,只有它们把自己的事务提交之后,我才能看到。这种事务隔离级别相应次之。这个级别实际上是通过创建视图来实现的。)

  • 可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。
    (这个我有两个方面的理解,一个是自己的事务中,一开始读取的记录,之后就一直会用这个记录,就算其他事务提交了修改了该记录,读取的还是一开始读取的记录,然后只有自己提交了事务,才能看到其他事务修改后的记录,这点实际上跟就区分了读提交了。这种级别再次之。这种级别也是通过事务开启时创建的试图实现的,所以整个视图看到的都是一样的值。“试图”可以理解为查询后不再更改的备份)

  • 串行化,顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。
    (串行化就很好理解了,就是用锁独占的方面,隔离出同一条记录读写时排斥,形成串行化执行的效果。当然隔离级别就是最高的,实现效率也是最低的)

要点

事务隔离级别是针对读来作用的,这个一定要注意,所以影响是读,其实怎么影响也很简单,就是读出来的数据,跟其他事务在修改这条记录的事务区间内,到底哪个阶段才影响我读的数据
读未提交:就是其他事务修改这条数据,他还没提交,我就会看到数据的变更的,显然这种,如果其他事务回滚,我读的就是错误的了,所以就是脏读,不可重复读,幻读都有可能是吧
读已提交:顾名思义就是其他事务一定要他的事务提交完成,我才能读这种变化,这种有什么问题了,问题就在于,假如我的事务还没有提交完,这时候我再去读这条记录,数据就发生变化了,但是这时候我没有提交啊,我自己的这个事务,前后读取的数据是不是就是不一样了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值