事务的概述
事务的概念
事务是由一个系列对系统中数据进行访问与更新 操作组成的一组程序执行逻辑单元
事务的基本特征
事务的4大基本特征:ACID 原子性,一致性,隔离性,持久性
事务的隔离级别
ACID中最难理解的是隔离性
在SQL规范中定义了4中隔离级别
①读未提交
②读已提交
③可重复读取
④顺序读
原子性
① 事务必须是一个原子的操作序列单元,要不全都操作成功,不要全都操作失败
② 任何一项操作失败都会导致事务失败,同时其他的已经被执行的操作权不都要被撤销和回滚
一致性
① 事务的执行不能破坏数据库数据的完整性和一致性,一个事务执行之前和执行之后数据库都必须处在一致性 状态
② 比如银行转账:A向B转账A转钱-100,但是B没有+100,这就违背了一致性
隔离性(重要啊)
① 事务的隔离性指的是在并发的情况下,并发事务相互隔离,不能被其他的事务干扰
② 事务的隔离级别(见下文)
持久性
① 事务的持久性指的是,事务一旦被提交,数据库中的数据被永久的保存下来
② 即使系统崩溃,那么重新启动数据库的话,会恢复到数据执行成功后的状态
事务的隔离级别
1.未提交读(READ_UNCOMMITED)(不可以解决脏读)
一个事务对数据进行更新,但是没有完成提交事务,在同时允许另一个事务也能访问该数据
① 隔离级别允许脏读
② 隔离级别最低
脏读实例
脏读:当前事务读到的数据是别的事务想要修改成为的但是没有修改成功的数据
并发的情况下事务A应该希望的结果应该是总金额为1500元的
T5查询的金额为0,这是事务B造成的,这个数据就是脏读数据
2.提交读 (READ_COMMITED)(解决脏读但是解决不了不可重复读的问题)
只能去读到别的事务提交后的数据,这样也就解决了脏读的问题
不可重复读实例
不可重复读:事务先前读取了数据,再读取的时候,发现是其他修改后的数据
在事务A在T4的时候读取余额为1000,,,但是在个时候,事务B把数据给改了,当事务A再读取的时候是0,,这个时候就是不可重复读
3.可重复读(REPEATABLE_READ)(控制脏读和不可重复读但是可能出现幻读)
在事务多次读取同一数据的时候,数据的值和数据开始的时候保持一致
幻读实例
幻读:事务第一次读取的数据比第二次读取的数据少了(第二次对数据进行添加了,添加的数据正好满足事务的查询条件)
T3的时候查询为1000,然后事务B又添加100元,导致A再查询的时候是1100元
4.顺序读
要求事务只能一个一个的执行,不能并发执行