事务(Transaction)
原子性(Atomicity)
事务必须是一个不可分割的整体
一致性(Consistency)
执行完数据库操作后,数据不会被破坏. (尤其在数据库领域)
例如:如果从 A 账户转账到 B 账户, A 账户扣了钱,那 B 账户一定有加钱
隔离性(Isolation)
我们必须保证数据库操作之间是“隔离”的(线程之间有时也要做到隔离),彼此之间没有任何干扰
事务隔离级别(Transaction Isolation Level)
要想真正的做到操作之间完全没有任何干扰是很难的,于是乎,每天上班打酱油的数据库专家们,开始动脑筋了,“我们要制定一个规范,让各个数据库厂商都支持我们的规范!”,这个规范就是:事务隔离级别(Transaction Isolation Level)。
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|
READ_UNCOMMITTED | 允许 | 允许 | 允许 |
READ_COMMITTED | 禁止 | 允许 | 允许 |
REPEATABLE_READ | 禁止 | 禁止 | 允许 |
SERIALIZABLE | 禁止 | 禁止 | 禁止 |
持久性(Durability)
当我们执行一条 insert 语句后,数据库必须要保证有一条数据永久地存放在磁盘中
由事务引发的问题
1. 脏读:事务 A 读取了事务 B 未提交的数据,并在这个基础上又做了其他操作。
2. 不可重复读:事务 A 读取了事务 B 已提交的更改数据。
3. 幻读:事务 A 读取了事务 B 已提交的新增数据。
Spring解决方案
1. PROPAGATION_REQUIRED
2. RROPAGATION_REQUIRES_NEW
3. PROPAGATION_NESTED
4. PROPAGATION_SUPPORTS
5. PROPAGATION_NOT_SUPPORTED
6. PROPAGATION_NEVER
7. PROPAGATION_MANDATORY
事务思维导图
