ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

事务的隔离级别

2021-12-26 00:00:04  阅读:171  来源: 互联网

标签:事务 隔离 级别 开启 脏读 提交 数据 读取


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

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

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

前提 同时开启了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事务不能做任何操作且包括读操作,此时事务间不会有任何交集,不会发生【脏读】【幻读】【不可重复】现象,每个事务中的操作都是安全的,但是会导致并发效率大大降低。

标签:事务,隔离,级别,开启,脏读,提交,数据,读取
来源: https://blog.csdn.net/qq_46489900/article/details/122150056

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有