12.2数据库的并发控制

事务调度

1、串行调度:是指多个事务依次串行执行,且只有当一个事务的所有操作都执行完成才执行另一个事务的所有操作。
• 例:有两个事务T 0 和T 1 ,事务T 0 从账号A转2000元到账号B;事务T 1 从账号A转20%的款到账号B。T 0 和T 1 的定义如下所示

 

2、并发调度:利用分时的方法同时处理多个事务.、

3、可恢复调度: 指满足这样的条件的调度:当事务T j 要读事务T i 写的数据时,T i 事务必须要先于事务T j 提交

并发操作带来的问题

 • 并发操作带来的数据不一致性有三类:丢失修改、不可重复读和读脏数据。
1、丢失修改:两个事务对同一个数据进行修改,导致事务A对数据库的修改被事务B的修改所覆盖。

2、不可重复读:事务对同一数据进行两次读取的结果不同。原因是两次读取的间隙数据被另一事务修改了。

 

 3、读脏数据:某事务读取的数据是其它事务修改后的值,但该修改后来又被撤销了

 

 并发调度的可串行性

• 多个事务的并发执行是正确的,当且仅当其结果与某一次序串行地执行它们的结果相同,称这种调度策略是可串行化的调度。
• 可串行性是并发事务正确性的准则。即:一个给定的并发调度,当且仅当它是可串行化的才认为是正确调度。

并发控制技术

• 并发事务如果对数据读写时不加以控制,会破坏事务的隔离性和一致性。为了保持事务的隔离性,系统必须对事务之间的相互作用加以控制,最典型的方式就是加锁。
1、排它锁(Exclusive Locks, 简称X锁):也称为写锁,用于对数据进行写操作时进行锁定。如果事
务T对数据A加上X锁后,就只允许事务T对数据A进行读取和修改,其他事务对数据A不能再加任何锁,也不能读取和修改数据A,直到事务T释放A上的锁。

2、共享锁(Share Locks, 简称S锁):也称为读锁,用于对数据进行读操作时进行锁定。如果事务T
对数据A加上了S锁后,事务T就只能读数据A但不可以修改,其他事务可以再对数据A加S锁来读取,只要数据A上有了S锁,任何事务都只能再对其加S锁读取而不能加X锁修改。
• 例:若事务T1对数据D1已加排它锁,事务T2对数据D2已加共享锁,那么事务T2对数据D1
(1) ;事务T1对数据D2 (2) 。
(1)A.加共享锁成功,加排它锁失败 B.加排它锁成功,加共享锁失败
C.加共享锁、排它锁都成功 D.加共享锁、排它锁都失败
(2)A.加共享锁成功,加排它锁失败 B.加排它锁成功,加共享锁失败
C.加共享锁、排它锁都成功 D.加共享锁、排它锁都失败

封锁协议

(1)一级封锁协议:是指事务T在修改数据A之前必须先对其加X锁,直到事务结束才释放X锁。解决了丢失修改的问题。
(2)二级封锁协议:是一级封锁协议加上事务T在读取数据A之前必须对其加上S锁,读完后即可释放S锁。解决了读脏数据的问题。
(3)三级封锁协议:是一级封锁协议加上事务T在读取数据A之前必须对其加上S锁,直到事务结束才释放S锁。解决了不可重复读的问题。

两段锁协议

• 两段锁协议(2PL):是指同一事务对任何数据进行读写之前必须对该数据加锁;在释放一个封锁之后,该事务不再申请和获得任何其他封锁。
• 所谓“两段”的含义是:事务分为两个阶段。第一阶段是获得封锁,也称为扩展
阶段。第二阶段是释放封锁,也称为收缩阶段。
例:
T1:Slock A...Slock B...Xlock C...Unlock B...Unlock A...Unlock C
T2:Slock A...Unlock A...Slock B...Xlock C...Unlock C...Unlock B

• 如果事务遵循两段锁协议,那么它们的并发调度是可串行化的。两段锁是可串行化的充分条件,但不是必要条件。即:遵循两段锁协议,一定是可串行化的;不遵循两段锁协议,可能是可串行化的,也可能不是。
• 注意:采用两段锁协议也有可能产生死锁,这是因为每个事务都不能及时解除被封锁的数据,可能会导致多个事务都要求对方已经封锁的数据而不能继续运行。

事务的隔离级别

1、READ UNCOMMITTED(读未提交):最低级别,任何情况都无法保证。
2、READ COMMITTED(读已提交):可避免读脏数据。
3、REPEATABLE READ(可重复读):可避免读脏数据,不可重复读。
4、SERIALIZABLE(串行化):最高级别,可避免读脏数据、不可重复读、幻读。
幻读:事务A查询得到N条数据,然后事务B又插入了M条数据,或者改变了这N条数
据之外的M条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条数据了,
就产生了幻读。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值