【数据库】 第11章 并发控制

第11章 并发控制

【数据库】 第11章 并发控制_第1张图片

事务

事务:(从微观角度,或者从DBMS角度)是数据库管理系统提供的控制数 据操作的一种手段,通过这一手段,应用程序员将一系列的数据库操作组合 在一起作为一个整体进行操作和控制,以便数据库管理系统能够提供一致性 状态转换的保证。

事务一般是由应用程序员提出,因此有开始和结束, 结束前需要提交或撤消。

Begin  Transaction
exec sql …
…
exec sqlexec sql commit work |  exec sql rollback work
End Transaction

在嵌入式SQL程序中,任何一条数据库操纵语句(如exec sql select等)都会引发一个新事务的开 始,只要该程序当前没有正在处理的事务。而事务的结束是需要应用程序员通过commit或 rollback确认的。因此Begin Transaction 和End Transaction两行语句是不需要的。

  • 事务的宏观性(应用程序员看到的事务): 一个存取或改变数据库内容的程 序的一次执行,或者说一条或多条SQL语句的一次执行被看作一个事务
  • 事务的微观性(DBMS看到的事务): 对数据库的一系列基本操作(读、写) 的一个整体性执行。

事务的并发执行:多个事务从宏观上看是并行执行的,但其微观上的 基本操作(读、写)则可以是交叉执行的。

事务的特性 ACID

  • 原子性Atomicity : DBMS能够保证事务的一组更新操作是原子不可分的,即 对DB而言,要么全做,要么全不做
  • 一致性Consistency: DBMS保证事务的操作状态是正确的(符合一个串性的调度),符合一致性的操 作规则,它是进一步由隔离性来保证的
  • 隔离性Isolation: DBMS保证并发执行的多个事务之间互相不受影响。例如两 个事务T1和T2, 即使并发执行,也相当于或者先执行了T1,再执行T2;或者先执行 了T2, 再执行T1。
  • 持久性Durability: DBMS保证已提交事务的影响是持久的(影响磁盘),被撤销事务的影 响是可恢复的(不影响磁盘)。

事务的并发可能导致

【数据库】 第11章 并发控制_第2张图片

  • 丢失修改

    由于并发交替执行的操作,可能导致某一事物的修改被覆盖

  • 不能重复读:

    是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。

    在一个事务过程中,由于另一个事务修改数据,造成该事务前后读取数据不一致

  • 幻读:

    幻读指的是事务不是串行 发生时的一种现象,是事务 A读取了事务B已提交的新 增数据。例如第一个事务对 一个表的所有数据进行修 改,同时第二个事务向表中 插入一条新数据。那么操作 第一个事务的用户就发现表 中还有没有修改的数据行, 就像发生了幻觉一样。解决 幻读的方法是增加范围锁 (range lock)或者表锁。

    在一个事务过程中,由于另一个事务插入或删除记录,造成该事务前后读取总的记录数不一致

  • 脏读:

    脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。

    一个事务读取了另一个事务尚未提交的数据

数据库事务隔离级别(脏读、幻读、不可重复读)_qq_41776884的博客-CSDN博客_幻读脏读不可重复读

DBMS对事物的控制

【数据库】 第11章 并发控制_第3张图片

事务的调度

事务调度(schedule):一组事务的基本步(读、写、其他控 制操作如加锁、解锁等)的一种执行顺序称为对这组事务的一个调度。

并发(或并行)调度:多个事务从宏观上看是并行执行的,但其微观上的基本 操作(读、写)则是交叉执行的。

面试必考的:并发和并行有什么区别? - 云+社区 - 腾讯云 (tencent.com)

并发相互抢占资源,并行不相互抢占资源

【数据库】 第11章 并发控制_第4张图片

并发调度的正确性

当且仅当在这个并发调度下所得到的新数据库结果与 分别串行地运行这些事务所得的新数据库完全一致,则说调度是正确的。

可串行性

如果不管数据库初始状态如何,一个调度对数据 库状态的影响都和某个串行调度相同,则我们说这个调度是可串行化的 (Serializable)或具有可串行性(Serializability)

并行调度的正确性是指内容上结果正确性,而可串行性是指形式上结果正 确性;

可串行性更严格
不可串性化的调度可能产生正确的结果

表达事务的一种模型
【数据库】 第11章 并发控制_第5张图片

冲突可串行性

【数据库】 第11章 并发控制_第6张图片

冲突可串行性: 一个调度,如果通过交换相邻两个无冲突的操作能够 转换到某一个串行的调度,则称此调度为冲突可串行化的调度。

【数据库】 第11章 并发控制_第7张图片

冲突可串行性 是比 可串行性 要严格的概念

满足冲突可串行性,一定满足可串行性;反之不然。

【数据库】 第11章 并发控制_第8张图片
在这里插入图片描述
【数据库】 第11章 并发控制_第9张图片

【数据库】 第11章 并发控制_第10张图片

封锁协议之锁的类型

  • 排他锁X (exclusivelocks)

    只有一个事务能读、写,其他任何事务都不能读、写

  • 共享锁S (sharedlocks)

    所有事务都可以读,但任何事务都不能写

  • 更新锁U (Updatelocks)

    初始读,以后可升级为写

  • 增量锁I (Incrementallock)

    增量更新(例如A=A+x) 区分增量更新和其他类型的更新

【数据库】 第11章 并发控制_第11张图片
【数据库】 第11章 并发控制_第12张图片

隔离

【数据库】 第11章 并发控制_第13张图片
【数据库】 第11章 并发控制_第14张图片

MySQL默认的隔离级别是可重复读
【数据库】 第11章 并发控制_第15张图片

封锁粒度

【数据库】 第11章 并发控制_第16张图片

两段锁协议

【数据库】 第11章 并发控制_第17张图片
【数据库】 第11章 并发控制_第18张图片

两段封锁协议是可以保证冲突可串行性的!

死锁

【数据库】 第11章 并发控制_第19张图片

基于时间戳的并发控制方法

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