隔离级别、mvcc、间隙锁的关联

news/2024/11/17 2:56:41/

隔离级别、mvcc、间隙锁的关联

  • 数据库并发问题及解决(数据库理论)
    • 脏写
    • 脏读
    • 不可重复读
    • 幻读
  • mysql实现
    • 脏读再解决
    • 不可重复读再解决
    • 幻读

数据库并发问题及解决(数据库理论)

数据库并发的时候会发生脏写、脏读、不可重复读、幻读的问题。
数据库理论中提供的解决方案就是读写锁。

脏写

含义:脏写是指两个事务同时update某条数据。
解决:写的时候加排他锁,读的时候不加锁。这样就可解决脏写问题。达到读未提交隔离级别

脏读

含义:脏读是指一个事务读到了另一个事务未提交的update操作。另一个事务如果回滚了,这个读操作脏了。
解决:写的时候加排他锁,读的时候加共享锁,读写操作互斥,在事务内读完就释放共享锁,读锁不用等事务执行完毕。这样就保证一个写的过程中不会有别的事务读,读的时候不会有别的事务写,就解决了脏读的问题。达到读已提交隔离级别

不可重复读

含义:事务A读取完成,事务B写操作,事务A再次读取。两次读取结果不一致,就是不可重复读。
解决:事务提交再释放共享锁,而不是读完就释放。这样就能解决不可重复读问题。达到可重复读隔离级别

幻读

含义:事务A读取某个数据范围,事务B写操作,事务A再次读取这段数据范围。两次读取结果不一致就是幻读。因为前面加的锁都是改哪行加哪行(有索引)
解决:事务按序执行。不能并发执行。达到串行化级别

mysql实现

上面是数据库理论的概念,但是mysql、oracle这样的数据库为了性能不会完全按照上面的理论来实现

脏读再解决

利用mvcc。每一次读都生成一个快照。快照不会包含别的事务未提交的数据。

不可重复读再解决

利用mvcc。在事务开启后的第一个数据库操作生成一个快照。后面的读都读这个快照。

幻读

快照读:mvcc场景下,读取readview中的快照。针对普通的select
当前读:含有更新意思的读。

不可重复读隔离级别下。对于快照读,本身已经不会出现幻读问题了。只有当前读会有幻读问题。
对于当前读幻读问题的解决需要利用间隙锁和临键锁。


http://www.ppmy.cn/news/1028007.html

相关文章

HTML详解连载(5)

HTML详解连载(5) 专栏链接 [link](http://t.csdn.cn/xF0H3)下面进行专栏介绍 开始喽行高:设置多行文本的间距属性名属性值行高的测量方法 行高-垂直居中技巧 字体族属性名属性值示例扩展 font 复合属性使用场景复合属性示例注意 文本缩进属性…

七、解析应用程序——枚举内容与功能

文章目录 1、web抓取2、发现隐藏内容2.1 蛮力技巧2.2 通过公布的内容进行推测2.3 利用公共信息 3、应用程序页面和功能路径4、发现隐藏参数 攻击应用程序的第一步是收集和分析与其有关的一些关键信息,以清楚了解攻击目标。解析过程首先是枚举应用程序的内容与功能&a…

VS Code中C++程序的调试(Debug)功能

有一个.vscode文件,存放当前工作区相关配置文件的目录。 launch.json {"version": "0.2.0","configurations": [{"name": "gcc.exe - 生成和调试活动文件", // 该调试任务的名字,启动调试时会在待…

[NOIP2003 普及组] 栈

题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表。 栈有两种最重要的操作,即 pop(从栈顶弹出一个元素)和 push(将一个元素进栈)。 栈的重要性不言自…

基于微信小程序的应届大学生招聘平台的设计与实现

伴随着社会以及科学技术的发展,互联网已经渗透在人们的身边,网络慢慢的变成了人们的生活必不可少的一部分,紧接着众多智能手机飞速的发展,小程序这一名词已不陌生,越来越多的企业、公司、高校、医院等机构都会使用小程…

Linux命令 -- sed

Linux命令 -- sed 插入删除覆盖复制打印替换参数 -f mo.txt文件内容,若无特别说明,默认如下 [rootlocalhost testdir]# cat mo.txt 1 2 3 4 5插入 先来展示一个执行未生效的 # 给第2行插入hello world。命令执行之后会打印效果,但文件内容…

Microsoft365家庭版1年订阅新功能及版本对比

Microsoft 365可帮助您工作、学习、组织、连接和创,只需一项方便的订阅,即可尽享具有 Microsft 365 的6款精品应用、可同时登录5 台设备(包括 Windows、macOS、iOS 和 Android 设备)、高级安全性等,并且可以自由管理授…

fork函数和exec族函数的结合使用 的案例

首先回顾之前所讲,在说明“为什么要创建进程”的时候,提到过以下两个原因: 其中第一个原因很好理解,而第二个原因就包含了上节所讲的exec族函数的知识点,并且不管是之前的博文还是上节的exec,都提到了一点“…