数据库事务
数据库事务的 4 个特性:
- 原子性:事务中的操作要么不做,要么全做
- 一致性:事务从一个正确的状态可以迁移到另一个正常的状态
- 隔离性:事务之间不互相影响
- 持久性:事务提交后可以持久化存储
事务的目的是为了保障一致性,原子性,隔离性,持久性都是为了一致性服务的
隔离性是指事务不互相影响。
影响大体分为以下几种
- 脏读:一个事务中读到另一个事务中未提交的数据
- 不可重复读: 同一事务中多次执行相同的 select, 数据改变(因为其他事务进行了 update 并提交)
- 幻读: 同一事务多次进行 select, 数据条目增加(因为其他事务进行了 insert 并提交)
- 可重复读: 同一事务,多次 select 也不会改变数据
为了解决上边的问题,引入了四种隔离性:
- READ UNCOMMITTED 读未提交: 可以读取为提交的数据,即可以脏读,幻读,不可重复读
- READ COMMITTED(RC) 读已提交: 只能读取已经提交的数据,不可以脏读,可以幻读和不可重复读
- REPEATABLE READ(RR) 可重复读: 同一事务中多次 select,数据也不会被修改,允许幻读,不允许脏读,不可重复读
- SERIALIZABLE: 串行化,不允许幻读,脏读,不可重复读
