MySQL事务的四大特性
- 原子性:事务是一个不可分割的最小单位,事务操作要么全部提交成功,要么全部失败回滚
- 隔离性:事务在没有提交之前是对其他事务不可见的
- 一致性:在事务开始之前和事务结束以后,保持的状态必须是一只,代表着数据库的完整性没有被破坏
- 持久性:事务处理结束后,对数据的修改是永久的,即便系统故障也不会丢失
小结:原子性是事务隔离的基础,隔离性和持久性是手段,最终目的是为了保持数据的一致性
事务的并发问题
- 脏读: 事务A读取了事务B更新的数据,然后B进行回滚操作,那么事务A读取到的数据就是脏数据
- 不可重复度:事务A多次读取同一个数据,事务B在事务A多次读取的过程中,对数据进行了更新并提交,导致事务A多次读取统一数据时,结果不一致
- 幻读:操作人A将数据库所有学生的成绩从具体分数改为ABCDE进行等级划分,就在同时,操作人B添加了一条新的学生数据,当A修改数据结束后,发现还有一条数据没有改过来,就好像出现了幻觉
小结:不可重复读和幻读容易混淆,在这里解释说明, 不可重复读主要侧重于修改数据, 而幻读侧重于添加或删除数据。
事务隔离级别
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交(read-uncommitted) | 是 | 是 | 是 |
不可重复读(read-committed) | 否 | 是 | 是 |
可重复读(repeatable-read) | 否 | 否 | 是 |
串行化(read-uncommitted) | 否 | 否 | 否 |