事务四大特征(ACID):
原子性
- 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生要么都不发生。
一致性
- 一致性是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
隔离性
- 隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会互相干扰。
持久性
- 持久性是指一旦事务提交成功,事务中所有的数据操作都必须被持久化保存到数据库中,即使提交事务后,数据库崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。
事务的隔离级别
Read uncommitted(读未提交)
- A、B两人。A会读取到B正在修改的数据,B如果把事务回滚,A读到的数据就是脏数据。上述情况即为脏读。
Read committed(读已提交)
- Oracle等大部分数据库默认的隔离级别。(不包括MySql)
- A、B两人。场景:A去饭店消费,自己的卡里有100元,就在要刷卡的一瞬间,B以迅雷不及掩耳盗铃之势把卡里的100元转走了,A再去消费,会发现自己的卡里没钱了。上述情况即为不可重复读
Repeatable read(可重复读)
- MySql的默认隔离级别。
- A、B两人。现在的情况就是在A去查询或其他操作时,B不能去更新A正在操作的数据。但是B可以新添加数据。这样在A查询数据期间也会发生数据不一致的情况。上述情况即为幻读。
Serizable(串行化)
- 级别最高的数据库隔离级别,可以避免上面所说的三种问题,但代价就是性能极慢,一般不会使用。
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
Read uncommitted | 对 | 对 | 对 |
Read committed | × | 对 | 对 |
Repeatable read | × | × | 对 |
Serizable | × | × | × |
网友评论