当前位置: 首页 > news >正文

事务与并发控制

事务(Transaction0):要么全做,要么全不做;

事务ACID:原子性Atomicity;一致性Consistency;隔离性Isolation;持久性Durability;

并发操作问题:

        1.丢失更新;(同时提交数据时,t2的事务会并发导致t1的事务修改被丢失)

        2.不可重复读;(事务A首先读取了一条数据,然后执行逻辑的时候,事务B将这条数据改变了,然后事务A再次读取的时候,发现数据不匹配了,就是所谓的不可重复读了)

        3.读 ' 脏 ' 数据;(并发情况下,事务2读取到事务1修改到一半就回退的数据,读取的数据有误)

封锁是最常用的并发控制技术:

        基本思想为:需要时,事务通过向系统请求对它所希望的数据对象(数据库中的记录)加锁,以确保它不会被非预期改变;

锁的概念:实质上就是一个允许或阻止一个事务对一个数据对象的存取特权;

1.基本的封锁类型有两种:排他锁(Exclusive Lock,X锁)和共享锁(SharedLock,S锁)

2.用封锁对进行并发控制:

        2.1 若事务T对数据D加了X锁,则所有别的事务对数据D的锁请求都必须等待直到事务T释放锁;

        2.2 若事务T对数据D加了S锁,则别的事务还可对数据D请求S锁,而对数据D的X锁请求必须等待直到释放锁;

        2.3 事务执行数据库操作时都要先请求相应的锁,即对读请求S锁,对更新(插入、删除、修改)请求X锁;

        2.4 事务一直占有获得的锁直到结束(COMMIT或ROLLBACK)时释放;

3.封锁的粒度:

        通常以粒度来描述封锁的数据单元的大小;DBMS(数据库管理系统)可以决定不同粒度的锁;有最底层的数据元素到最高层的整个数据库,粒度越细,并发性越大,但软件复杂性和系统开销也就越大;

4.封锁的级别:

        4.1 0级封锁:封锁的事务不重写其它非0级封锁事务的未提交的更新数据。这种状态实际上实用价值不大;

        4.2 1级封锁:被封锁的事务不允许重写未提交的更新数据,这防止丢失更新的发生;

        4.3 2级封锁:被封锁的事务既不重写也不读未提交的更新数据,这除了1级封锁的效果外还防止了读脏数据;

        4.4 3级封锁:被封锁的事务不读未提交的更新数据,不写任何(包含读操作的)未提交的数据;

        4.5 活锁与死锁:

                4.5.1 封锁带来的一个重要问题是困难引起“活锁”与“死锁”;

                4.5.2 锁:级别低的事务无法执行;可采用先来先服务的策略解决;

                4.5.3 死锁:两个以上事务循环等待被同组中另一事务锁住的数据单元的情形,称为“死锁”;

                 - 如何解决: 1. 一次性锁请求; 2. 锁请求排序; 3. 序列化处理;4. 资源剥夺; - 对待死锁的另一种方法是不去防止,而让其发生并随时进行监测,一旦监测到系统已发生了死锁再进行解除处理;

        6. 可串行性:一组事务是一个调度就是它们的基本操作的一种排序;通常,在数据库系统中,*可串行性是并发执行的正确性准则,即当且仅当一组事务的并发执行调度是可串行化的,才认为它们是正确的;

        7. 两段封锁法: 1. 事务划分成两个阶段:1.发展(Growing)或加锁阶段;2.收缩(Shrinking)或释放锁阶段;

http://www.lryc.cn/news/361920.html

相关文章:

  • spring boot 中的异步@Async
  • 【C++/STL】list(常见接口、模拟实现、反向迭代器)
  • wms中对屏幕进行修改wm size设置屏幕宽高原理剖析
  • java面试题及答案2024,java2024最新面试题及答案(之一)
  • Go Modules 使用
  • 结账和反结账
  • k8s怎么监听资源的变更
  • Cobaltstrike常用功能
  • UWP与WPF:微软两大UI框架
  • 【面试】字节码文件是跨平台的吗?
  • SpringCloud中注册中心Nacos的下载与使用步骤
  • 心缘Hub小程序
  • 攻防世界maze做法(迷宫题)
  • PID——调参的步骤
  • Deno入门:Node.js的现代替代品
  • WIFI 万[néng]钥匙 v5.0.10/v4.9.80 SVIP版!
  • JCR一区级 | Matlab实现TCN-BiLSTM-MATT时间卷积双向长短期记忆神经网络多特征分类预测
  • redis之发布与订阅
  • LLM主流开源代表模型
  • Openharmony的usb从框架到hdf驱动流程梳理
  • Apache Doris 基础 -- 数据表设计(数据模型)
  • “雪糕刺客”爆改“红薯刺客”,钟薛高给了消费品牌哪些启示?
  • 多输入多输出非线性对象的模型预测控制—Matlab实现
  • 多项分布模拟及 Seaborn 可视化教程
  • 学计算机,我错了吗?
  • 学习小心意——简单的循坏语句
  • C++ 类方法解析:内外定义、参数、访问控制与静态方法详解
  • pytorch+YOLOv8-1
  • JavaScript 基础 - 对象
  • 代码随想录第23天|回溯part3 组合与分割