数据库复试

1.事务

1.1概念

事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个整体。

1.2事务的ACID特性

  • 原子性(Atomicity):事务中的操作要么都做,要么都不做。
  • 一致性(Consistency):事务执行的结果必须是使数据库从一个状态到另一个状态。
  • 隔离性(Isolation):一个事务的执行不能被其他事务干扰。
  • 持续性(Durability):一个事务一旦提交,它对数据库的影响就是永久性的。

事务ACID特性可能遭到破坏的因素有:
(1)多个事务并行运行时,不同事务的操作交叉运行。
(2)事务在运行过程中被强行停止。

2.并发控制

2.1丢失修改
两个事务T1和T2读入同一数据并修改,T2提交的结果覆盖了T1提交的结果,导致T1的修改被丢失。
2.2不可重复读
事务T1读取数据后,事务T2执行更新操作(增、删、改),T1无法再现提取前一次读取的结果。
2.3读“脏”数据
事务T1修改某一数据,事务T2读取同一数据后,T1由于某种原因被撤销,这时候被T1修改的数据恢复到原值,导致T2读取到的数据与数据库中的数据不一致,则T2读到的数据就为“脏”数据。
解决方案
在并发环境下,事务的隔离性很难保证,因此会出现很多并发一致性问题。产生并发不一致性问
题的主要原因是破坏了事务的隔离性。解决方法是通过 并发控制 来保证隔离性。并发控制可以通
过 封锁 来实现,但是封锁操作需要用户自己控制,相当复杂。数据库管理系统提供了事务的 隔 离级别 ,让用户以一种更轻松的方式处理并发一致性问题。

3.封锁

3.1封锁类型

  • 排他锁又称写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他事务都不能再对A加任何类型的锁,直到T释放A。这就保证了其他事务在T释放A之前不能读取或是修改A.
  • 共享锁又称读锁。若事务T对数据对象加上S锁,则允许T读取A但不能修改A,其他事务只能对A加S锁,而不能加X锁,直到T释放A上的S锁为止。这就保证了其他事务可以读取A,但在T释放A上的S锁之前都不能修改A。

3.2封锁协议
(1)概念:在运用X锁和S锁的过程中约定的规则。例如,何时申请X锁和S锁,封锁的时间,何时释放等。
(2)种类

  • 一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。

如果仅仅是读数据而不对其进行修改,则不需要加锁,所以它不能保证不重复读和读“脏”数据。

  • 二级封锁协议:在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,读完后即可释放。

由于读完后即可释放,所以不能保证可重复读。

  • 三级封锁协议:在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。

可以防止丢失修改、读“脏”数据、不可重复读。

你可能感兴趣的:(数据库)