事务 transcation
什么事务
事务是为了保证一个业务操作
的完成性, 一个业务操作 要么 全部成功 、要么 全部失败 、不允许部分成功、部分失败。
事务的四大特性 ACID
- A 原子性 : 保证业务 是一个 不可再分的 基本操作
- C 一致性 : 事务的最终目的 就是 为了 保证 数据库 中 数据的一致性 ,即 事务前后 数据是 一致的 ~
- I 隔离性 : 数据库在 事务环境 中 会给 每一个业务 开辟一个 缓存区 、缓存区 与 缓存区 的 隔离 机制 就是 数据库的 隔离性
- D 持久性 : 保存 存储在数据库中的数据 具备 持久化(永久性存储) 功能
事务的隔离级别
- uncommited read 读未提交 : 可以 读取 另一个 事务 未提交的数据
- commited read 读已提交 (Oracle 数据库的默认隔离级别):
- repeatable read 可重复读 (MySQL 数据库默认隔离级别) : 通过 锁行 解决 不可重复读 问题
- serializable read 序列化读 : 通过 锁表 解决 幻读的问题
隔离级别产生的问题
- 脏读 : 读取 另一个 事务 未提交的数据 ,这种现象 被称为 脏读 (脏读是 一种非常严重的问题,通常数据库不允许出现脏读现象)
- 不可重复度 : 在一个 事务 二次 读取 同一条记录的时候, 另一个事务 对该条记录 进行了修改, 导致 2次 读取的 结果不一致
- 幻读 : 在一个 事务 二次 读取 总数量的数量, 另一个事务 在 期间 新增了 一条 记录 、导致 2次 读取 的数量不一致
隔离级别/问题 | 读未提交 | 读已提交 | 可重复读 | 序列化读 |
---|---|---|---|---|
脏读 | √ | × | × | × |
不可重复读 | √ | √ | × | × |
幻读 | √ | √ | √ | × |