前言
事务具有4个特征,分别是原子性、一致性、隔离性和持久性,简称事务的ACID特性。
原子性
一个事务执行,要么全部成功,要么全部失败回滚,不能只有部分成功,这就是事务的原子性
一致性
事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态。
如果数据库系统在运行过程中发生故障,有些事务尚未完成就被迫中断,这些未完成的事务对数据库所作的修改有一部分已写入物理数据库,这是数据库就处于一种不正确的状态,也就是不一致的状态
持久性
表示事务结束后的数据不随着外界原因导致数据丢失
操作前A:800,B:200
操作后A:600,B:400
如果在操作前(事务还没有提交)服务器宕机或者断电,那么重启数据库以后,数据状态应该为
A:800,B:200
如果在操作后(事务已经提交)服务器宕机或者断电,那么重启数据库以后,数据状态应该为
A:600,B:400
隔离性
事务的隔离性是指在并发环境中,并发的事务时相互隔离的,一个事务的执行不能不被其他事务干扰。不同的事务并发操作相同的数据时,每个事务都有各自完成的数据空间,即一个事务内部的操作及使用的数据对其他并发事务时隔离的,并发执行的各个事务之间不能相互干扰。
标准SQL规范中,事务隔离级别有下面四种
严格级别 1最低,4最高
| name | 级别 | 描述 |
|---|---|---|
| Read uncommitted | 1 | 读未提交,该隔离级别允许脏读取,其隔离级别最低; |
| Read committed | 2 | 授权读取也称为已提交读,授权读取只允许获取已经提交的数据。 |
| Repeatable read | 3 | 可重复读,就是保证在事务处理过程中,多次读取同一个数据时,其值都和事务开始时刻是一致的,因此该事务级别禁止不可重复读取和脏读取,但是有可能出现幻影数据。 |
| Serializable | 4 | 串行化,是最严格的事务隔离级别,它要求所有事务被串行执行,即事务只能一个接一个的进行处理,不能并发执行。 |