事务的隔离级别

脏读:脏读是指某一个事务读取到了其他事务未提交的数据,如果此数据回滚,将导致读取到的数据是错误的数据。

不可重复读 指某个事务在开启后,读取某个范围或者某条数据时,在此事务未结束的时间里内,其他事务对表内的数据进行了添加,或者更改了某一条或者多条数据后进行了提交,此时本事务读取到的数据条数与之前某时间段读取到的条数不相同,或者在读取一条数据时,两个时间段内读取到的数据值不相同。

幻读 在一个事务开启后,其他事务对表中的一行或者多行进行了更改操作后进行了提交,本事务读取到的一行或多行的值仍和数量然是相同的,此时并不能读到其他事务在本事务查询时,提交的更改内容,即:其他事务对此表的更改本事务不能读到,这达成了可重复读的目的,但是读取到的数据是虚幻的。如果其他事物在此之间真实的更改了数据,则在本事务提交之前的读操作,读取到的都是未被更改前的数据,造成了读取的数据是虚幻的。

前提 同时开启了A,B两个事务但还都未开始操作数据

1.Read uncommitted (读未提交)

B事务未提交的数据 A事务可以读取到其修改的值。在B事务开启后,对一行进行了修改,但是未进行提交,此时A事务可以读取到此行 B事务未提交的数据,这发生了脏读现象,A事务也会发生 【不可重复读】现象,即多次读取同一行或多行,得到的数量或值不相同,和【幻读】现象,即A事务之前读取到的数据被修改后,此条之前读取的数据不是真实的数据是虚幻的,这与脏读是不相同的情况下读取数据所发生的的不相同的现象,区别是一个已经被提交一个可能会回滚。

2.Read committed(读已提交)

A事务在开启后,只能读取到已经被提交的数据,未被提交的数据,或者B事务中正在修改但未提交的数据,A事务读取不到。但是A事务在结束之前再次读取此表时,如果B事务对表中的条数或者某行数据进行了修改,A再次读取时会发生两次读取到的值或者行数不相同,此时发生了【不可重复读】的现象,且在B提交之前所读取到的值是脏数据,又发生了【脏读】现象。

3.Repeatable read(可重复读)

A事务开启后,无论在任何时间,任何次数读取一条或者多条数据得到的结果都是相同的。在A事务未结束前,B事务对表中的数据和条数进行修改后,A事务读取到的数据仍然是A 事务开启前最后一次事务提交后表中数据的状态,直到A事务结束后再次读取时才能得到被B事务修改的数据,这样避免了【脏读】【不可重复读】的问题,但是会产生新的问题:【幻读】,即B事务在A事务中读取数据时修改了表中的数据,A事务并不能读到修改内容,在此之间A事务读到的数据都是虚幻的。

4.Serializable (序化读)

指A事务和B事务不能同时执行,必须排队依次执行,如果A事务先被开启,则B事务不能做任何操作且包括读操作,此时事务间不会有任何交集,不会发生【脏读】【幻读】【不可重复】现象,每个事务中的操作都是安全的,但是会导致并发效率大大降低。

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值