事务的隔离级别|学习笔记

简介: 快速学习事务的隔离级别

开发者学堂课程【高校精品课-厦门大学 -JavaEE 平台技术事务的隔离级别学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/80/detail/15919


事务的隔离级别


隔离级别属性,隔离级别在事务并发的三个问题有关。即脏读问题,不可重复读的问题和幻读的问题。

脏读:事物和事物之间的隔离性没做好。例如 a事务在整个的事务过程中间,会去修改数据。b 事物会去读到 a 事务在过程中间所修改的数据。如果a事物最后把它修改的数据改回成原来样的,但是由于b事物读到了 a事物的过程中间的数据。称为b 事物读到了 a的脏数据。

脏读问题其实就是完全没有隔离事物和事物之间。如果隔离了事物的之间的东西,使他不能读到这个事物中间的数据那就会出现第二个问题,叫做不可重复读。假如a 事物的时间比较长,他首先读了一个数据,然后当他读完数据以后,开启了另外

一个并行的事务,叫做b 事务。b 事物会去修改这个数据。

b事物结束了以后会把它的修改的数据值提交上去。a 事物如果在 b事物结束以后再去读数据就会导致他在 b事物开始之前读的数据和b事物开始之后读的两个数据不一样,称之为不可重复读的问题。若要解决不可重复读的问题,最简单的方式就是对数据来进行加锁。例如加一个读锁。a 事务在读取后就对事物进行了读锁,b事务就不可以去修改它,只可以去读它。这就能够保证不可重复读的问题得已解决。

加了读锁就能保证不可重复读问题,但是不能避免幻读的问题。例如 a事务要统计在系统中间所有的商品的总数,它在读取了系统中间所有的商品的数量后把所有的商品都加了一个读锁,但 b事务可以向商品中间去新增一个新的商品。所以如果a事务再去读一遍,有商品的总数时,发现多了一个商品,称之为幻读的问题。

虽然对数据进行了读锁,但不能禁止另一个事务去增加一个新的数据。但要解决这个问题,要做到完全串行,在读数据的时候,不能对这个数据做任何的改动,为了避免上述的这些问题,可以对这个数据库设定事务的隔离级别。在属性中,可以把它设成默认的级别。因为默认的级别实际就是数据库所使用的隔离级别,并且数据库的隔离级别是可以在数据库里单独去设置的。

数据库和数据、事务和事务之间的操作只读到事务提交以后的,数据第二个级别是READ_UNCOMMITED,这是一个最低的级别,这个最低级别是完全没有隔离事务和事物之间。可以读到任何一个其他事物在中间过程所产生的数据,所以它会产生所有的问题。脏读问题不可重复读问题和幻读问题。提高一个级别READ_COMMITED,这样隔离了事物和事物之间的操作,不会读到另外一个事物在

中间过程中间所修改的数据。但它会有不可重复读和幻读的问题。第三个级别是REPEATABLE_READ,怎么读数据都是一样的。

这样的一个操作,是对数据进行了读锁,不能解决幻读问题。最后是 SERIALIZABLE完全串行以后就可以解决脏读、不可重复读和换读的问题。所有问题都解决了,但是会带来更大的问题,即所有的数据的操作都变成串行,若完全没有并行,这样的一个系统是完全不可能使用的。

相关文章
|
1月前
|
SQL 关系型数据库 MySQL
事务及事务的隔离级别
事务及事务的隔离级别
|
1月前
|
SQL 关系型数据库 MySQL
⑨【MySQL事务】事务开启、提交、回滚,事务特性ACID,脏读、幻读、不可重复读。
⑨【MySQL事务】事务开启、提交、回滚,事务特性ACID,脏读、幻读、不可重复读。
38 0
|
1月前
|
SQL
事务的隔离级别
事务的隔离级别 多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题。设置不同隔离级别就可以解决 1.脏读:一个事务,读取到另一个事务中没有提交的数据 2.不可重复读,在同一个事务中,两次读取的数据不一样 3.幻读:(dml)一个事务操作数据表中记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改 隔离级别 1.read uncommitted:读未提交 产生问题:脏读、不可重复读、幻读 2.read committed:读已提交 产生问题:不可重复读、幻读 3.repeatable read:可重复读 产生问题:幻读 4.serializable:串行
26 0
|
1月前
|
供应链 数据库
|
8月前
|
关系型数据库 MySQL 数据库
事务的基本特性和隔离级别
事务的基本特性和隔离级别
30 0
|
8月前
|
机器学习/深度学习 算法 关系型数据库
数据库事务——事务隔离级别
数据库事务——事务隔离级别
|
11月前
|
算法 关系型数据库 MySQL
事务的隔离级别和对应的问题
事务的隔离级别和对应的问题
|
11月前
|
数据库
数据库事务的并发问题 (脏读、幻读、不可重复读)
数据库事务的并发问题 (脏读、幻读、不可重复读)
89 0
|
12月前
|
存储 SQL 安全
事务ACID与隔离级别
事务ACID与隔离级别
78 0
|
SQL Oracle 关系型数据库
数据库事务隔离级别
数据库事务隔离级别
104 0