数据库原理知识总结(4)

本文探讨了数据库并发一致性问题,如丢失修改、读脏数据和不可重复读,并介绍了封锁机制,包括X锁、S锁和意向锁。封锁的粒度从逻辑单元到物理单元,以及三级封锁协议的详细解释,展示了如何逐步解决这些问题。最后,提到了两段封锁协议,确保事务并发执行的可串行化调度。
摘要由CSDN通过智能技术生成

数据库的并发控制

1. 并发一致性可能导致的问题:

  • 丢失修改(在事务A对某个特定数据修改过后,事务B再次修改,使得并发执行的事务A再次执行时,对应的数据不再是之前修改的那个)
  • 读脏数据(在事务A对某个数据修改过后,事务B读取这个数据,但是由于某些缘故,事务A可能发生回滚,这就会导致A对于B读取的那个数据前的修改不作数,B读到的是脏数据)
  • 不可重复读(事务A在读取某个特定数据后,事务B对这个数据做更新,使得A在对这个数据再次读取时结果和第一次不一样)

2. 解决并发一致性问题(封锁)

  • 写锁(X锁、排他锁)
  • 读锁(S锁、共享锁)
  • 意向锁(对于封锁粒度小的对象加锁时,需要对其上一层的对象加上意向锁)

封锁的粒度:

  • 包括逻辑单元,比如属性列,属性列的集合,关系表,元组等,
  • 或是物理单元:页、物理记录等 

三级封锁协议:

  1. 一级封锁协议:修改数据时必须加X锁,等到事务结束后马上解除
  2. 二级封锁协议:在一级封锁协议的基础上,读数据的时候加S锁,读取结束撤销
  3. 三级封锁协议:在一级封锁协议的基础上,读数据的时候加S锁,事务结束时撤销

一级封锁协议下,解决了丢失修改的问题,但没能解决读脏数据和不可重复读的问题

二级封锁协议下,不仅可以处理丢失修改的问题,还可以处理读脏数据的问题,但是对于不可重复读的问题无能为力

三级封锁协议下,可以解决并发一致性的三大问题

两段封锁协议:对于所有并发的事务,分两个阶段进行加锁和释放锁,在第一阶段,集中进行加锁,这段时间称为扩展阶段,在此之后,在第二阶段内集中进行解锁,这段时间称为收缩阶段。通过两段锁协议,实现可串行化调度(也就是说,事务并发执行的次序下,得出的结果和串行执行事务的结果一样)。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值