事务未提交 别人能读取到吗_数据基础(二)事务的隔离级别

什么是事务的隔离性?

两个人同时在一个画本上画画,过程中你一笔我一笔,那么最后最后画出来的一定是一个四不像,多个事务同时操作一个数据也会和上面的情况类似,所以为了让不同的事务之间相互不存在干扰,就需要对事务的操作进行隔离,事务的隔离性也就是将操作同一个数据的事务相互分离,让操作之间分开有序的执行。

如果不对事务进行隔离会有哪些问题?

在数据库中,如果多个事务可以同时操作一个数据,那么就会产生脏读、重复读、幻读的问题。

脏读

出现原因:修改数据的同时可以读取数据;

案例: 以存款为例,假设A与B同用一张银行卡,银行卡内余额为1000。

操作: 如下图所示,当事务B对余额进行了修改但是未提交事务,此时事务A对银行卡余额进行读取,并且在这个 数据的基础上进行业务操作,进行存款,结果会导致最终的银行卡余额出现问题 ;

928a34c0bd2161e384c3ea737714aa0e.png

重复读

出现原因: 读取数据的同时可以进行修改;

案例: 以取款为例,假设A与B同用一张银行卡,银行卡内余额为1000。

操作: 如下图所示,事务A,事务B同时对余额进行访问,事务A对余额进行读取,事务B对余额进行修改,当事 务A第一次对余额进行读取后,此时事务B提交,那么当事务A第二次读取该数据时的数据就与第一次读 取的数据不同,这种情况称为可重复读;

d609535fe16d136dac3a9ce88382ffc2.png

幻读

出现原因:读取和修改的时候可以insert数据;

案例: 以打印银行卡账单存款记录为例,假设A与B同用一张银行卡,银行卡内存款记录为两条。

操作: 如下图所示,存款表有2条数据,A对存款表进行读取, 当A第一次读取到存款记录的时候只有2条数据; 但是与此同时B往银行卡进行了一笔存款然后提交了事务,在B提交了存款事务之后,A执行了打印操 作,最后发现打印存款表信息的时候却发现有3条数据,与之前查出的数据不一样,这种平白无故多出来 的数据就好象发生了幻觉一样所以称为幻读;

58c17a41b3aabe7ed562d7f398e8b821.png

事务的四种级别

就像上面所说的,如果不对事务进行隔离那么势必就会产生很多问题,所以就需要一种机制来对不同事务间的操作进行隔离,让彼此之间相互不影响,数据库对事务隔离设置有四种程度的级别,分别为读未提交、读提交、重复读、序列化;级别依次从低倒高,级别越高事务的之间的隔离操作就越严格,当然要求越严格其性能也会越低。

READ_UNCOMMITTED(读未提交)

这种情况只限制了两个数据不能同时修改,但是修改数据的时候是可以读取的,这级别的事务隔离有脏读、重复读、幻读的问题;

READ_COMMITTED(读提交)

这种隔离级别的事务限制了修改数据的时候不允许读取,但是读取数据的时候是可以进行修改的,所以这种事务的隔离级别解决了脏读问题,但会存在重复读、幻读问题;

REPEATABLE_READ(重复读)

这种隔离级别的事务限制了读取数据的时候也不可以进行修改,所以解决了重复读的问题,但是读取范围数据的时候可以插入数据,所以还会存在幻读问题;

SERIALIZABLE (序列化)

事务最高隔离级别,在该级别下,所有事务都是进行串行化顺序执行,这样就可以避免脏读、不可重复读与幻读所有问题了。但是这种事务隔离级别下事务执行的效率低下,比较耗数据库性能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值