事务四大特性(ACID)

事务四大特性(ACID)

(1)原子性(Atomic)

​ 指事务是一个不可分割的工作单位(像原子一样),事务中的操作要么都发生,要么都不发生。实现事务的原子性,要支持回滚操作,在某个操作失败后,回滚到事务执行之前的状态。

​ A和B都有1000块钱,A向B转账300,分为两个步骤,首先A=1000-300,然后B=1000+300。这两个步骤无论哪一个出错,都会失败,然后回滚到最初始状态。所以这两个步骤只能一起成功,或者一起失败,不能只发生其中一个动作。

(2)一致性(Consistency)

事务前后数据的完整性必须保持一致,事务完成后要符合逻辑运算。

​ A和B都有1000块钱,A向B转账300,转账前AB的钱都是1000块,他们共有2000块。转账后A的钱为700块,B的钱为1300块,他们依然共有2000块。转账前后符合逻辑运算,钱的总和事务前后未发生变化,符合一致性原则。

(3)隔离性(Isolation)

​ 在并发数据操作时,不同的事务拥有各自的数据空间,它们的操作不会对彼此产生干 扰。用于解决并发事务的相互影响(脏读、不可重复读、幻读,第一类丢失更新,第二类丢失更新)

脏读:

​ 事务A读到了事务B未提交的数据,然后进行了其他一些操作,事务B如果因为某些原因回滚了,那么事务A读取的数据就是脏数据。

时间段事务A(取款)事务B(存款)
T1开始事务
T2开始事务查询余额为1000元
T3存入200元
T4查询余额为1200元余额为1200元
T5取出400元因某些原因进行回滚
T6余额为800元余额为1000元
T7提交事务提交事务

不可重复读:

事务A两次读取数据得到的结果不一样,在此过程中其他事务对数据进行了更新操作(update),并提交了事务。

时间段事务A(查询余额)事务B(存款)
T1开始事务开始事务
T2第一次查询余额为1000元查询余额为1000元
T3存入200元
T4余额为1200元
T5提交事务
T6第二次查询余额为1200元
T7提交事务

幻读:

事务A两次读取数据得到的结果不一样,在此过程中其它事务对数据进行新增(insert)或删除(delete)操作,并提交了事务。

时间段事务A(注册账号)事务B(注册账号)
T1开始事务开始事务
T2得到所要注册的账号为001得到所要注册的账号为001
T3查数据库不存在001的账号查数据库不存在001的账号
T4insert操作(注册成功)
T5提交事务
T6insert操作(注册失败,001账号已存在)
T7提交事务

第一类丢失更新:

回滚丢失,A事务回滚操作时,覆盖B事务已经提交的事务(关系型数据库以避免其发生)

时间段事务A(取款)事务B(存款)
T1开始事务开始事务
T2查询余额为1000元查询余额为1000元
T3取出400元存入200元
T4余额为600元余额为1200元
T5提交事务
T6回滚事务
T7余额为1000元(丢失更新,账户损失200元)

第二类丢失更新:

提交丢失,A事务提交事务时,覆盖B事务已提交的事务(同不可重复读)

时间段事务A(取款)事务B(取款)
T1开始事务开始事务
T2查询余额为1000元查询余额为1000元
T3取出400元取出200元
T4余额为600元余额为800元
T5提交事务
T6提交事务
T7余额为600元(丢失更新,银行损失200元)

总结:

脏读:A事务读到未提交的B事务,然后B事务回滚了;

不可重复读:A事务读到已提交的B事务(更新),B事务提交前后导致A事务两次读取的结果不同

幻读:A事务读到已提交的B事务(增删),B事务提交前后导致A事务两次读取的结果不同

第一类丢失更新:回滚丢失,A事务回滚,导致B事务丢失数据

第二类丢失更新:提交覆盖丢失,B事务先提交,A事务后提交,覆盖了B事务

数据库隔离级别

设置描述
Serializable可避免脏读、不可重复读、幻读情况的发生
Repeatable read可避免脏读、不可重复读情况的发生
Read committed可避免脏读情况发生
Read uncommitted最低级别,以上情况均无法保证

(3) 持久性(Durability)

事务提交后,对系统的影响是永久的。事务结束后的数据不随着外界原因导致数据丢失。

​ A和B都有1000块钱,A向B转账300,转账前如果断电或系统故障,重启数据库后A和B的钱都应该为1000块。如果转账后断电或系统故障,重启数据库后A的钱应该为700,B的钱应该为1300。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值