数据库期末复习总结之并发控制(三)

并发控制概述

  1. 多事务执行方式 :
    (1)事务串行执行
    (2)交叉并发方式
    (3)同时并发方式(多处理机)
  2. 并发控制机制的任务
    (1)对并发操作进行正确调度
    (2)保证事务的隔离性
    (3)保证数据库的一致性
    事务并发执行破坏事务的隔离性和数据库的一致性。

数据的不一致性

  1. 数据丢失
  2. 不可重复读
  3. 读“脏”数据

并发控制的主要方法是*机制(对于DBMS)。

*

定义:*就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁。
影响:加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。

基本*类型

  1. 排它锁(简记为X锁)又称为写锁
    若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。

  2. 共享锁(简记为S锁)又称为读锁
    若事务T对数据对象A加上S锁,则其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。

三级*协议

  1. 一级*协议
    事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放该锁。
    结果:可防止丢失修改
    数据库期末复习总结之并发控制(三)
  2. 二级*协议
    一级*协议+事务T在读取数据R前必须先加S锁,读完后即可释放S锁。
    结果:防止丢失修改和读“脏”数据。
  3. 三级*协议
    一级*协议 + 事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放
    结果:防止丢失修改、不读“脏”数据和可重复读。

活锁和死锁

  1. 活锁: 先来先服务
  2. 死锁:
    预防方法:一次*法和顺序*法
  3. 死锁的诊断与解除
    超时法
    等待图法

并发调度的可串行性

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

冲突可串行化调度

冲突操作是指不同事务对同一个数据的读写操作和写写操作:

注意:不同事务对同一个数据的写读操作不是冲突操作。

不同事务的冲突操作和同一事务的俩个操作是不能交换的。
一个调度Sc在保证冲突操作次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc1,如果Sc1是串行的,称调度Sc为冲突可串行化调度。

一个调度是冲突可串行化的,一定是可串行化的调度。——是充分条件
保证并发操作调度正确性的方法
*方法:两段锁(Two-Phase Locking,简称2PL)协议

两段锁协议

  1. 两段锁协议的内容:

    1. 在对任何数据进行读、写操作之前,事务首先要获得对该数据的*
    2. 在释放一个*之后,事务不再获得任何其他*。
  2. “两段”锁的含义——事务分为两个阶段
    第一阶段是获得*,也称为扩展阶段;
    第二阶段是释放*,也称为收缩阶段。

事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。