首页 > 数据库 >数据库原理之并发控制的基本概念

数据库原理之并发控制的基本概念

时间:2024-07-06 12:00:58浏览次数:19  
标签:封锁 事务 数据库 T2 T1 并发 死锁 基本概念

我们今天继续来看数据库原理,我们简单讲讲数据库的并发控制。


并发控制的定义

并发控制是为了保证事务的隔离性和一致性,数据库管理系统需要对并发操作进行正确调度。并发控制的主要技术有:、时间戳、乐观控制法、多版本并发控制等。

并发操作带来的数据不一致性主要有以下三点:

  1. 丢失修改:两个事务T1和T2 读入同一数据并修改,T2 提交的结果破坏了 T1提交的结果,导致T1 的修改被丢失。
  2. 不可重复读:指事务T1读取数据后,事务T2 执行更新操作,使T1 无法再现前一次读取结果。
  3. 读脏数据:事务T1 修改某一数据后并将其写回磁盘,事务T2读取同一数据后,T1 由于某种原因被撤销,这时T1 修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致。

并发控制的基本方法

并发控制的基本方法有排他锁和共享锁。

排他锁的定义:若事务T对数据对象A加上X锁,则只允许事务T读取和修改A。事务T释放A上的锁之前:其他事务不能读取和修改A,不能再对A 加任何类型的锁。

共享锁的定义:若事务T对数据对象A加上S锁,则事务T可以读取A,但不能修改A。事务T释放A上的S锁之前: 其他事务可以读取A,可以对A加S锁,但不能修改A,也不能对A加X锁

封锁协议

封锁协议有三级,分别叫一级封锁协议、二级封锁协议、三级封锁协议。

  1. 一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。
  2. 二级封锁协议:事务T在修改数据R之前必须先对其加锁(一级封锁协议),并且其他事务在取数据之前必须先对其加S锁,读完后即可释放S锁。
  3. 三级封锁协议:事务T在修改数据R之前必须先对其加锁(一级封锁协议),并且其他事务在读取数据之前必须先对其加S锁,直到事务结束才释放(二级封锁协议是读完就能释放)

活锁和死锁

活锁

活锁:事务T1封锁了数据R,事务T2又请求封锁R,于是T2 等待;T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了 T3 的请求,T2 仍然等待,T4 又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4 的请求.......T2 有可能永远等待,产生活锁。

避免活锁的方法:先来先服务策略

死锁

这里的死锁和操作系统当中的死锁不一样。这里的死锁是事务T1 封锁了数据R1,T2 封锁了数据 R2,T1 又请求封锁R2,因T2 已封锁了 R2,于是T1 等待T2释放R2上的锁,接着T2 又申请封锁 R1,因T1 已封锁了 R1,T2 也只能等待T1,释放R1 上的锁,这样T1在等待T2,而T2又在等待T1,T1和T2两个事务永远不能结束,形成死锁。

死锁的预防

  • 一次封锁法:每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。
  • 顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务按这个顺序实施封锁。

死锁的诊断与解除

诊断:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁或构建事务等待图存在回路。

解除:选择一个处理死锁代价最小的事务,将其撤销(UNDO),释放此事务持有的所有的锁。

可串行化调度 

定义:多个事务并发执行的结果=这些事务按某种次序串行执行的结果。

一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。例如现有事务 T1 和 T2,若 T1与 T2 的并发执行结果与先T1后 T2 相同,或者与先 T2 后 T1 相同那么这个调度就是正确的,否则就是错误的。

冲突可串行化调度

冲突操作:指不同的事务对用一个数据的读写操作(读和写)和写写操作(写和写)。

不同事务的冲突操作和同一事物的两个操作是不能交换的,如果发生交换,自然会发生错误。基于此,如果调度能保证冲突操作的次序不变,就称为冲突可串行化的调度。冲突可串行化调度一定是可串行化调度。


结语

今天对并发控制的介绍就到这里。如果对您有帮助,希望您可以为我留下点赞和关注。谢谢您,这对我真的很重要!

标签:封锁,事务,数据库,T2,T1,并发,死锁,基本概念
From: https://blog.csdn.net/m0_75262255/article/details/140220780

相关文章

  • 用友财务软件数据库恢复
    是一个关键的操作,旨在解决数据库文件损坏或数据丢失的问题。一、恢复方法使用软件内置的数据恢复工具步骤:打开用友财务软件,进入“工具”或“数据管理”等相关菜单。找到“数据库恢复”或“数据恢复”选项,点击进入。选择需要恢复的数据库文件和备份文件。这里需要确保备份文......
  • 管家婆数据库数据恢复
    一、确认数据丢失情况首先,需要确认数据是否真的丢失,以及丢失的数据范围。有时候,数据可能只是暂时无法访问,或者由于软件故障导致的数据显示问题。二、检查备份定期备份的重要性管家婆软件通常会具备自动备份功能,用户应该确保该功能已经开启,并定期检查备份文件的完整性和可用......
  • 数据库迁移工具
    对于国产数据库数据往Oracle数据库上迁移的需求,推荐使用以下几种迁移软件: 1.达梦数据迁移工具简介:达梦数据库自带的数据迁移工具,特别适用于达梦数据库(DM)到Oracle数据库的迁移。特点:专门为达梦数据库设计,对达梦数据库的特性有深入的支持。图形化界面,操作简便,用户可以通过简......
  • Linux关于数据库,群集,缓存加速等精捡面试题
    目录第一部分:企业网站架构部署与优化..................................................61.列举几种常见的HTTP状态码?及各种代表的含义?................................62.HTTP请求方法有哪些?请至少列举三种,并简述它们的用途。........................63.HTTP协......
  • sqlserver数据库MDF文件修复
    针对SQLServer数据库的MDF文件修复,这是一个相对复杂的过程,具体方法取决于文件的损坏程度、是否有备份以及数据库的状态。以下是一些常见的修复方法:使用备份恢复这是最直接且最可靠的方法。如果你有数据库的备份,并且备份是在MDF文件损坏之前创建的,那么你可以通过还原备份来恢......
  • Java项目:基于SSM框架实现的中小企业人力资源管理系统【ssm+B/S架构+源码+数据库+开题
    一、项目简介本项目是一套基于SSM框架实现的中小企业人力资源管理系统包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。项目都经过严格调试,eclipse或者idea确保可以运行!该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值......
  • 并发、多线程和HTTP连接之间有什么关系?
    一、并发的概念 并发是系统同时处理多个任务或事件的能力。在计算中,这意味着系统能够在同一时间段内处理多个任务,而不是严格按照顺序一个接一个地执行它们。并发提高了系统的效率和资源利用率,从而更好地满足用户的需求。在现代应用程序中,用户可能会同时执行多个操作,例如同时......
  • Rust简明教程第九章-多线程和并发
    并发并发指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果进程是一个程序的实例线程是一个进程中执行的一个单一线性执行流程,一个进程包含多个线程,线程可以并发执行main是主线程,系统的入口区别:并发指一个系统能够......
  • 信号量——Linux并发之魂
    欢迎来到 破晓的历程的博客引言今天,我们继续学习Linux线程本分,在Linux条件变量中,我们对条件变量的做了详细的说明,今天我们要利用条件变量来引出我们的另一个话题——信号量内容的学习。1.复习条件变量在上一期博客中,我们没有对条件变量做具体的使用,所以,这里我们通......
  • 并发编程面试1
    一、进程,线程,协程的区别1、进程:操作系统进行资源分配和调度的基本单位。每个进程有独立的内存空间。进程通讯就采用共享内存,MQ,管道。2、线程:一个进程可以包含多个线程,线程就是CPU调度的基本单位。一个线程只属于某一个进程。线程之间通讯,队列,await,signal,wait,notity,Exchanger......