对不同隔离级别的理解

以下是我个人的理解,有不对的地方,还望博友指出哈。
在数据库中,有4种不同的隔离级别供我们选择,分别是read uncommited,read commited,repeatable read,serializable
我来依依解释这四种级别
第一个,read uncommited,从名字上看,说的是,可以读没有提交的数据,那么这个显然是有很大的问题的,例如,我可以读还没有提交,但是已经更新或者插入或者删除的数据,但是当某个时刻(还在read的事务内)以上这些操作都rollback了,那么,读出来的数据可能现在已经不是最新的状态了,这样就造成了脏读,这显然是不能接受的,所以,这个级别一般项目中是不会选择的。读取的交易不会阻止其它的交易,一个未COMMIT的交易会阻止其它写入的交易。

第二个,read commited,这个意思是,一个事务读的信息都是已经commited了的,读不到没有commited的,这样在读取一次时,不会造成脏读,但是这个有个问题,就是如果我在读取一次呢,这个时候如果有另外一个事务,这个时候对读取的数据进行了一些操作,并且提交了,那么就很可能造成,第一次读和第二次读的数据不一致的情况,这就是所谓的,不可以重复读,但是这个级别至少是可以保证它不会脏读。读取的交易不会阻止其它的交易,一个未COMMIT的交易会阻止其它所有的交易。
第三个,repeatable read,意思是说,可以重复读,那么这种的隔离级别要求,在读取数据的时候,不允许在有对读取数据进行写入,那这个时候,就可以避免重复读,读取的交易不会阻止其它读取的交易,但会阻止其它写入的交易,而写入的交易会阻止所有其它的交易。但是这个时候,我可以对这条数据进行删除,那么这个时候,就可能产生幻读,我实际上是读对了,但是由于后续的一些操作,导致我读出来的数据有问题,就是幻读。
最后一个serializable,这个从字面上解释,就是说的,串行化,也就是说,每一个事务的开始,都必须在前一个事务结束后执行,他们是串行的,不是并行的,那么这个时候,上面所有的问题都可以解决,不会造成脏读,重复读,幻读

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值