一. 事务的基本要素
- 原子性。一个事务开始后的所有操作,要么全部做完要么全部不做。如果执行过程出现错误则回滚到最初状态
- 一致性:事务开始前和开始后,数据库的完整性约束没有被破坏。
- 隔离性:同一时间只允许一个事务请求同个事务,不同事务之间彼此没有任何干扰。
- 持久性:事务完成后,事务对数据库的所有更新将被保存到数据库
二. 事务的并发问题 - 脏读:事务A读取了事务B更新的数据,然后事务B进行了回滚。此时事务A读取的数据是脏数据
- 不可重复读:事务A多次读取同一条数据,事务B在事务A多次读取的过程中对数据进行了更新操作。导致事务A多次读取同一数据时出现结果不一致
- 幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表。