事务简介
事务是指一套操作,这些操作要么全部完成,要么全部不完成。
事务的四个特性
- 原子性(Atomicity)
- 这些操作要么全部执行成功,要么全部不执行。只要一个指令执行失败数据就要进行回滚到指令执行之前的状态
- 一致性(Consistency)
- 事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定
- 隔离性(Isolation)
- 当多个用户并发访问时,事务之间不能互相干扰。如执行一个事务执行完后才执行下一个
- 持久性(Durability)
- 当事务正确完成后,它对于数据的改变是永久性的
并发事务导致的问题
- 第一类丢失更新
- 撤销一个事务时,把其他事务已提交的更新数据覆盖
- 第二类丢失更新
- 两个事务同时读取,结果一个事务的提交被另一个事务的提交覆盖,导致丢失
- 脏读
- 一个事务读取另一个事务正在执行但未提交的数据
- 幻读/虚读
- 一个事务两次查询的结果不一致。因为另一个事务在两次查询之间执行了
- 不可重复读
- 一个事务两次读取的数据不一致。因为另一个事务在两次之间更新了数据
数据库事务的隔离级别
- Read uncommitted,读未提交
- 一个事务可以读取另一个未提交事务的数据
- Read committed,读提交
- 一个事务要等另一个事务提交后才能读取数据
- 可以避免脏读
- Repeatable read,重复读
- 一个事务开始读取数据时,不再允许修改操作
- 可以避免脏读,不可重复读
- Serializable,序列化
- 事物穿行化执行
- 可以避免脏读、不可重复读与幻读。但效率低下