软件设计师29--并发控制
- 考点1:事务的特性
- 例题:
- 考点2:并发问题
- 并发产生的问题
- 丢失更新
- 不可重复读问题
- 读“脏”数据
- 考点3:封锁协议
- 例题:
考点1:事务的特性
- 原子性(Atomicity):事务作为一个不可分割的整体,确保所有操作要么全部成功,要么全部失败,不会停留在中间状态。
- 一致性(Consistency):事务必须保证数据库从一个一致的状态转换到另一个一致的状态。例如,转账操作中,无论转账次数如何,双方的总金额必须保持不变。
- 隔离性(Isolation):在并发环境中,多个事务的执行应相互隔离,以确保每个事务的操作不会被其他事务干扰。
- 持久性(Durability):一旦事务被提交,对数据库的更改就应该是永久性的,即使系统发生故障也不会丢失。
例题:
1、事务的 (D)是指,当某个事务提交(COMMIT)后,对数据库的更新操作可能还停留在服务器磁盘缓冲区而未写入到磁盘时,即使系统发生故障,事务的执行结果仍不会丢失。
A、原子性
B、一致性
C、隔离性
D、持久性
考点2:并发问题
并发产生的问题
- 丢失更新
- 不可重复读问题
- 读“脏”数据
丢失更新
两个事务对同一个数据进行修改,导致事务A对数据库的修改被事务B的修改所覆盖
两个事务T1,T2对A进行减1操作,但是在T1事务没有提交时,T2也读A并进行减1操作。
结果是:T1,T2两个事务对同一个数据A进行了两次减1操作,但是最终结果是15,也就是有一个修改丢失了。
不可重复读问题
事务对同一数据进行两次读取的结果不同。原因是两次读取的间隙数据被另一事务修改了。
T1事务对A、B求和,但是在T1事务两次求和的间隙,T2事务修改了B的值,导致T1事务两次相同的操作得到的结果却不一样,也就是不可重复读。
读“脏”数据
某事务读取的数据是其他事务修改后的值,但这个修改动作后来被撤销了,也就是读到了脏数据。
T1事务读C的值,然后将值修改,然后写入C,这时T2事务读C的值,读到的是修改后的值,但是,T1事务最后进行了回滚,那也就意味着T2事务读到的C的值是错误的,也就是读到了脏数据。
考点3:封锁协议
共享锁/S锁/读锁:若事务T对数据对象A加上S锁,其他事务只能对A再加上S锁,不能再对A添加X锁。
排他锁/独占锁/X锁/写锁:若事务T对数据对象A加上X锁,其他事务不能再对A添加任意锁。
例题:
1、若事务T1对数据D1加了共享锁,事务T2T3分别对数据D2和数据D3加了排他锁,则事务(D);
A、T1对数据D2D3加排他锁都成功,T2T3对数据D1加共享锁成功
B、T1对数据D2D3加排他锁都失败,T2T3对数据D1加排他锁成功
C、T1对数据D2D3加共享锁都成功,T2T3对数据D1加共享锁成功
D、T1对数据D2D3加共享锁都失败,T2T3对数据D1加共享锁成功