事务,事务的脏读、幻读、不可重复读与事务的隔离级别

1、事务概念

事务:指作为逻辑工作单元执行的一系列操作,要么全部执行,要么全部不执行。在数据库中体现在,一条sql语句或一组sql语句,这些sql语句要么全部都执行,要么全部不执行。
例:银行取钱:A账户上存款10000,现取款1000,取款后A账户存款为9000。A取款1000就是事务。

2、事务的ACID特效

  1. 原子性(Atomicity):事务作为一个整体被执行,其中的操作要么全部执行,要么全部不执行 。
    例:A取款1000,取款机未发生错误,正常取款,A账户存款变成9000。A取款1000,取款机发生错误,A账户存款仍为10000。
  2. 一致性(Consistency):事务操作前后,数据库保持一致性状态。数据库中数据需要保持完整性约束,既实体完整性、域完整性、参照完整性、用户自定义的完整性 。
    例:A取款前,存款+A现金为10000,A取款后,存款+A现金为10000。
  3. 隔离性(Isolation):多个事务并发操作时,事务之间互不影响。
    例:A对A账户取款1000,B同时对A账户取款1000,A账户存款8000。而不会出现两次取款,取的是同1000的情况。
  4. 持久性(Durability):事务提交后,对数据的操作永久存在。
    例:A取款1000后,在不存取款情况下,存款永久为9000。

3、脏读

脏读:一个事务正在访问数据,并且对数据进行了修改,但是修改还未提交。此时另一条事务也访问了该数据,并且使用了数据。
例:
1.数据X=100,事务A访问数据X并且执行事务(X=X+10),但是还未提交,此时X=110;
2.事务B访问数据X=110,并且使用了数据X;
3.事务A执行错误,执行回滚,数据X=100;
事务B访问到的数据X=110,既为脏数据。

4、不可重复读

不可重复读:一个事务多次读取同一个数据。在第一个事务还未结束时,另一个事务访问该数据,并执行了修改操作。由于第二个事务的修改,使得第一个事务多次读取的数据不相同。既一个事务两次读取的数据不一样,为不可重复读。
例:
1.数据X=100。事务A第一次访问数据X=100。
2.事务B访问数据X,并执行操作X=X+10=110。
3.事务A再次访问数据X=110。

5、幻读

幻读:第一个事务对表中所有行数据进行了修改。同时,第二个事务向表中插入了一条新的数据。第一个事务执行后发现仍有一条数据没有修改。
例:
1.数据X=100,数据Y=100。事务A对表中所有数据+10。A=A+10=110。B=B+10=110。
2.同时,事务B向表中插入数据Z=100。
3.事务A执行完发现表中出现Z=100。

5、事务的隔离级别

读未提交
读已提交(解决脏读)
例:数据X=100;事务A访问数据X并执行X=X+10=110;同时,事务B并发访问数据X;因为设置事务隔离级别为读已提交,此时事务A执行并提交后,事务B才可访问数据X=110。解决脏读。

可重复读(解决脏读、不可重复读)
例:数据X=100;事务A多次访问数据X;A第一次访问数据X=100;因为设置事务隔离级别为可重复读,既只有当事务A执行完成后事务B才可执行;事务A第二次访问数据X=100;之后事务B并发访问数据X并执行X=X+10=110。解决不可重复读。
可串行化(解决脏读、不可重复读、幻读)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值