1
- 事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位
- 原子性( Atomicity ):事物中的操作要么全做,要么全不做
- 隔离性( Isolation ):并发执行的各个事物之间互不干扰;一个事务内部的操作及使用的数据对其他并发事务是隔离的;每个事务在执行的时候应感觉不到其它事务的存在
- 一致性( Consistency ):则数据库在事务执行前是一致的,执行过程中可能暂时出现不一致,而当事务执行完后,数据库仍会处于一致性状态
- 持久性( Durability ):一个事务一旦提交(commit)之后,它对数据库的影响必须是永久的。系统发生失效不能改变事务的持久性。
2
事物执行的结果是使数据库从一个一致性状态编导另一个一致性状态。如果事物非正常结束,则数据库此时可能处于不一致的状态,即处于不正确的状态。
如从一个卡转钱到另一个卡,定义事物T,包含2个操作 B1 = B1-delta, B2 = B2+delta。如果T非正常结束只执行了第一个操作,则“我”莫名其妙卡里少了100
1
- 为什么要并发控制
并发执行可以提高系统的吞吐量,可以减少平均响应时间。但当同一数据库系统中有多个事务并发运行时,如果不加以适当控制,可能会破坏事务的隔离性,产生数据的不一致性。 - 保证哪些特性
一致性、隔离性
2
- 哪几类不一致
丢失修改、不可重复读、读“脏”数据 - 怎么避免
调度、锁、协议、时标方法、乐观方法、多版本并发控制
3
- 什么是封锁
封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁 - 几种类型
- 排它锁(写锁):若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁
- 共享锁(读锁):若事务T对数据对象A加上S锁,则其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁
4 如何用封锁机制保证数据的一致性
基于锁这个工具,设计一组规则(三级封锁协议、两阶段封锁协议),来合理安排一组并发事务的交错运行的指令,使得产生的调度是可串行的和可恢复的,甚至是无级联的
6
- 什么是死锁
一组进程中,每个进程都无限等待被该组进程中其它进程所占有的资源,在无外力介入的条件下,将因永远分配不到资源而无法运行的现象 - 预防死锁
- 一次封锁法:要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行
- 顺序封锁法:预先对数据对象规定一个封锁顺序,所有事物都按这个顺序实行封锁。
7
等待图法检测死锁
- 用事务等待图动态反映所有事务的等待情况
- 事务等待图是一个有向图G=(T,U)
- T为结点的集合,每个结点表示正运行的事务
- U为边的集合,每条边表示事务等待的情况
- 若T1等待T2,则T1,T2之间划一条有向边,从T1指向T2
- 系统进行周期性检查,如果发现图中存在回路,则表示出现了死锁,为此选择一个事务回滚,打破死锁
8
可串行的调度是正确的调度
几个事务的并行执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同。这种并行调度策略称为可串行化(Serializable)的调度
9
- 2 4 8 16
10
是,因为该调度可以通过 r1(A)和w3(B)r2(B)r2(A)w2(B)进行非冲突指令的交换来转化成串行的调度
12
13
3包含于1=2
4包含于1
14
(1)
(2)
会
课堂1
S1:冲突可串行;不可恢复
S2:不可串行;可恢复
S3:可串行;可恢复
课堂2
是,等价于r1(X) w1(X) r1(Y) w1(Y) r2(X) r2(Y) w2(Y)
不是(事物1在事物结束前提前释放了锁)






