[ Mysql ] 事务 非 事物

news/2024/3/4 5:26:29

[ Happy Dragon Boat Festival ]

很久以前整理的关于事务的一些内容,趁这次活动的机会分享并回顾一下,废话不多说,蹦 !


[ 事务即并发,并发即事务 ]

特点——原子性、一致性、持久性、隔离性。原子性是基础,隔离性是手段,一致性是约束条件,而持久性是我们的目的。

  1. 原子性:一个事务中是可以包含很多SQL语句的,那么原子性就规定了,这个事务中的所有SQL语句必须全部执行成功才能提交,反之全部回滚,提交失败。因为有任何一条语句的异常都会导致这条事务不完整。(undoLog,redoLog)

  2. 一致性:数据库在进行事务操作后,会由原来的一致状态,变成另一种一致的状态。也就是说当事务提交后,或者当事务发生回滚后,数据库的完整性约束不能被破坏。。(隔离级别、等影响)

  3. 隔离性:事务与事务之间的执行语句互不影响。(隔离性分级别的,受隔离级别的影响,可解决脏读、不可重复度、幻读问题)

  4. 持久性:事务一经提交,永久存储,不受系统发生运行故障被迫中断等影响。(binLog)


隔离级别 & 解决的问题

隔离级别:

  1. RU:最低级别,产生脏读、不可重复读、幻读

  2. RC:解决脏读,产生不可重复读、幻读

  3. RR:解决脏读、不可重复读,产生幻读

  4. SERIALIZABLE:解决脏读、不可重复度、幻读


【脏读】和【不可重复读、幻读】的核心区别就是——被读取的事务是否已提交。

即一个事务在执行过程中读取到了另一个事务(在未提交基础上)的DML(增、删、改)操作。比如事务A读取到了事务B正在操作(增、删、改)的数据,这条数据就是被B弄脏了,可能导致A在读取B执行操作的前后两次读取数据不一致,破坏了数据库中的隔离性,这就是脏读。


【不可重复读】和【幻读】的核心区别就是——被读取事务(已提交的基础上)是否为更新的DML操作。是则不可重复读,否则幻读。

即一个事务在执行过程中读取到了另一个事务(在已提交基础上),更新或插入/删除的数据,读取到更新的则属于不可重复读,反之读取到插入/删除的就属于幻读。


试想事务A读取到了事务B已经提交了的更新数据,那么这就会导致事务A在读取B提交更新事务前后两次数据不一致了,这样的直接意思就是——A一个事务中的两次读取不可重复,也就是不可重复读。那么同样的意思,只是换成插入/删除——事务A执行过程中读取到了事务B已经提交了的新增/删除操作,那么这就导致事务A的执行过程中前后两次读取的【数据量】不一致,这里可形象的比喻A认为自己眼花了,在同一个房间里第一次看是一个,第二次再看却立马变成了两个,这也就是所谓的"幻读",以上介绍的三种都是破坏了事务的隔离性。


下面针对这三个问题举出例子:

脏读(A读取时触发)

时间点事务A事务B
1begin;
2select * from user where id = 1;begin;
3update user set namm = 'test' where id = 1;
4select * from user where id = 1;
5commit;commit;

不可重复读(A读取时触发)

时间点事务A事务B
1begin;
2select * from user where id = 1;begin;
3update user set namm = 'test' where id = 1;
4commit;
5select * from user where id = 1;
6commit;

幻读(A读取时触发)

时间点事务A事务B
1begin;
2select * from user where id > 1;begin;
3insert user select 2;
4commit;
5select * from user where id > 1;
6commit;

下面这个是不同隔离级别对应所解决的问题总结表(画外音:简直无敌总结)


隔离级别MVCC版本生成时机写操作释放锁的时机锁的范围脏读不可重复度幻读
READ UNCOMMITTED/SQL执行完立即释放行锁
READ COMMITTED每次select时commit行锁
REPEATABLE READ事务第一次select时commit行锁或间隙锁特定情况
SERIALIZABLE事务第一次select时commit行锁或间隙锁

RR 和 SERIALIZABLE为什么会有两种锁的范围,原因就是如果锁的是唯一索引则退回到行锁即所谓的记录锁——recordLock,否则使用默认的next-key锁(本质上是间隙锁gapLock,因为next-key锁的组成是recordLock+gapLock)。

而为什么RR在特定情况下会出现幻读呢?就是间隙锁解决幻读始终还是有范围的,如果插入的数据不在间隙锁的间隙范围还是有可能发生幻读的。

意向锁兼容性图(左为已有的锁,右为试图获取的锁)

.IXISXS
IX兼容兼容冲突冲突
IS兼容兼容冲突兼容
X冲突冲突冲突冲突
S冲突兼容冲突兼容

对于意向锁的总结:

  • IX,IS是表级锁,不会和行级的X,S锁发生冲突。只会和表级的X,S发生冲突

  • 行级别的X和S按照普通的共享、排他规则即可。所以之前的示例中第2步不会冲突,只要写操作不是同一行,就不会发生冲突。


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

相关文章

在HTML语法中,用花括号{}括起来的内容是什么呢?

在HTML语法中,使用花括号{}括起来的内容通常表示占位符或模板语法,用于动态地插入或生成具体的内容。这种语法通常是由特定的模板引擎或框架提供,并在服务器端进行处理。 比如在某Django模板文件中,有如下的代码: &l…

使用Tortoise SVN Merge版本合并时遇到的合并失败

今天,使用SVN 进行了一次版本合并,从分支合到主版本,搞了半天没有成功,不过最终解决了,记录一下。 情况:版本663(主版本)和版本850(分支版本),两…

springcloud整合gateway

1.新建gateway模块 添加gateway依赖 2.添加gateway配置 2.1配置转发地址 2.2 配置断言规则 3.启动 order-nacos,stock-nocas,gateway模块 3.集成nacos 3.1添加nacos依赖 3.2 配置uri,添加nacos 3.3重启gateway服务

批处理命令之精确获取操作系统版本信息

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴! 作者:朱金灿 来源:…

哪吒之魔童降世视听语言影评_《哪吒之魔童降世》成功的要素与视听语言

动漫赏析论文第三篇:《哪吒之魔童降世》成功的要素与视听语言 摘要:《哪吒之魔童降世》自上映以来毫不意外地成为了暑期档的“黑马”,甚至不少网友直言称其是中国国产动画的标杆之作、国漫新希望。面对国民的称赞,我们应该总结其成功的要素,虚心学习影片成功的点。本文试图通…

32位版本的轻量级linux,适用于旧计算机的10种最佳轻量级Linux发行版

Linux最大的卖点之一一直是它能够减少和使用尽可能少的资源。 Linux可以使旧计算机从死里逃生,并通过较少资源占用的系统使它们重新完全运行。 那里有很多很棒的发行版,它们的目标是尽可能轻巧,以适应低功率机器。该列表探讨了该类别中十种最佳可能性。 Lubuntu /Xubuntu 首…

〖大前端 - 基础入门三大核心之 html 篇⑧〗- 无序列表

当前子专栏 基础入门三大核心篇 是免费开放阶段。推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V!说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费开放,购买任意白宝书体系化专栏可加入TFS…

使用Microsoft.Office.Interop.PowerPoin遥控PPT

Microsoft.Office.Interop.PowerPoin操作PPT 主窗体,填写ppt路径,打开ppt打开ppt后,可用代码操作ppt可获取每页PPT截图,并获取对应小节名称,备注等代码下载地址联系qq 主窗体,填写ppt路径,打开p…

Android实现拨打电话功能

Android实现拨打电话功能 先上UI效果图点击联系博主拒绝权限同意权限直接拨号 跳转到拨号界面跳转到拨号界面 同时附带号码 代码实现AndroidManifest.xml中添加权限点击联系博主判断是否有拨号权限申请权限回调直接拨号跳转到拨号界面跳转到拨号界面 同时附带号码 完整代码Main…

Zookeeper的配置和myid文件说明

配置文件说明 配置项 tickTime2000 dataDir/zookeeper-data/ initLimit5 syncLimit2 maxClientCnxns2048 autopurge.snapRetainCount3 autopurge.purgeInterval1 4lw.commands.whiteliststat, ruok, conf, isro, mntr authProvider.1org.apache.zookeeper.server.auth.SASLAu…

7.NVIC中断优先级管理

1.NVIC中断优先级分组: 分组就是确定系统初始化中断分组之后,确定系统是哪一个分组,从而确定好每一个中断到底有几位抢占优先级和响应优先级;CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断&#xff0c…

Linux shell练习题——cd、ls、mkdir、mv、rm

1. 练习⼀: 尝鲜 1. 使⽤ cd 切换到桌⾯ cd Desktop2. 使⽤ touch 在桌⾯创建 a.txt b.txt c.txt 三个⽂件 touch a.txt b.txt c.txt3. 使⽤ mkdir 在桌⾯创建 hello ⽬录. mkdir Desktop/hello4. 使⽤ mv命令 b.txt c.txt 两个⽂件移动到 hello ⽬录下 mv b.txt c.txt he…

70c语言,DOTA V6.70C中英文互通版下载

6.70c详细改动介绍: 修正某些严重BUG 6.70b详细改动介绍: 增加了对土耳其语的支持 修正相位转移(仙女龙)对海象人和凤凰的作用 修正几个模式会出现的bug(全智力/敏捷/力量模式和SD模式) 修正凤凰不会引爆地雷的问题 修正几个关于超新星的问题 修正Sunray…

再生龙系统恢复流程

再生龙系统恢复流程 1、选择UEFI 2、选择第一个,enter 3、简体中文 4、下一步 5、下一步 6、选择第一个 7、选择第一个 8、如果显示有镜像磁盘,就Ctrl-C 9、选择第三个 10、选择第一个 11、选择插入的磁盘 12、选择镜像,Done 13…

数据结构与算法程序设计---景区导游咨询系统

一.项目要求 二.技术要求 三.代码实现 //景区导游咨询系统 #include<iostream> #include<cstring> #include<algorithm>; #include<stack> #include<vector> #include<queue> using namespace std; typedef long long ll; const int maxn…

dota 技能表

龙骑 力量-中&#xff08;中立&#xff09; "火焰气息 快捷键&#xff1a;F 向面前锥形范围吐出一道火焰&#xff0c;对敌方单位造成伤害。施法距离&#xff1a;500。最大距离&#xff1a;650 等级1 - 造成75点的伤害。 等级2 - 造成150点的伤害。 等级3 - 造成225点的…

中华好诗词(四)

301、李商隐的《锦瑟》中引用了哪四个典故&#xff1f;&#xff08;庄周梦蝶、杜鹃啼血、鲛人泣珠、蓝田日暖,良玉生烟&#xff09; 302、白居易《琵琶行》中写道&#xff1a;“门前冷落车马稀,老大嫁作商人妇.”这句诗化用了哪个成语&#xff1f;.&#xff08;门前冷落&#…

dota感悟

一: 初恋就像是林肯法球&#xff0c;投入大量时间和金钱&#xff0c;结果只能避免自己再次受伤.. 分手就像是疯狂面具&#xff0c;顺风时&#xff0c;对对方造成更大伤害&#xff0c;逆风时&#xff0c;只能使你死的更快。 分手之后&#xff0c;我知道要有一颗坚强的龙心&#…

Midjourney终极指南:提示的艺术

​关注文章下方公众号&#xff0c;即可免费获取AIGC最新学习资料 导读&#xff1a;通过制作完美的提示&#xff0c;发现使用Midjourney生成令人惊叹的图像的秘密。在这个终极指南中&#xff0c;将带您完成创建有效提示的过程&#xff0c;这将释放Midjourney AI的全部潜力&#…

AOJ660 逃生的青蛙王子

Description 多恩王子昆汀-马泰尔(人赐外号青蛙)在向丹妮女王求婚失败后&#xff0c;居然想去偷丹妮的龙来证明自己&#xff01;然而青蛙王子低估了驯龙的难度&#xff0c;龙被青蛙王子从地下室中放了出来后便失去了控制&#xff0c;开始追杀青蛙王子&#xff0c;王子最后无奈逃…
最新文章