当前位置: 首页 > 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)或释放锁阶段;

相关文章:

  • 【康耐视国产案例】AI视觉相机创新 加速商超物流数智化转型
  • sudo apt update sudo: apt: command not found
  • 【OceanBase诊断调优】—— obdiag 工具助力OceanBase数据库诊断调优(DBA 从入门到实践第八期)
  • K8s中配置使用ingress
  • 揭秘拼多多API:智能电商时代的数据驱动新篇章
  • Jmeter性能测试-【关联,提取器】
  • 【期末速成】——计算机组成原理(1)概述
  • 计算机tcp/ip网络通信过程
  • Linux文本管理四剑客001
  • 如何有效屏蔽手机上的骚扰电话20240530
  • kettle 使用动态变量名定义变量
  • 【Linux】多线程——线程概念|进程VS线程|线程控制
  • Linux中本地yum仓库的搭建
  • 深入解析力扣167题:两数之和 II(双指针法详解及模拟面试问答)
  • ehcache3多级缓存应用
  • canvas 绘制双线技巧
  • classpath对获取配置文件的影响
  • JavaScript设计模式与开发实践系列之策略模式
  • Laravel核心解读--Facades
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • 对超线程几个不同角度的解释
  • 技术:超级实用的电脑小技巧
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 以太坊客户端Geth命令参数详解
  • 用Canvas画一棵二叉树
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • python最赚钱的4个方向,你最心动的是哪个?
  • 说说我为什么看好Spring Cloud Alibaba
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (七)Activiti-modeler中文支持
  • (七)Knockout 创建自定义绑定
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (五)IO流之ByteArrayInput/OutputStream
  • (转)Oracle存储过程编写经验和优化措施
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (自用)仿写程序
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET 8.0 中有哪些新的变化?
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net 反编译_.net反编译的相关问题