MySQL夯实之路-事务详解
事务四大特性
事务需要通过严格的acid测试。Acid表示原子性,一致性,隔离性,持久性。
原子性(atomicity)
事务是不可分割的最小单元,对于整个事务的操作,要么全部提交成功,要么全部失败回滚。
一致性(consistency,最重要)
数据库总是从一个一致性的状态转换到另一个一致性的状态。要求几个事务并发执行的结果与串行顺序执行的结果一致。
隔离性(isolation)
通常,一个事务的修改在提交前对其它事务不可见。事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的(一个事务不会被另一个事务影响,最理想的就是等待一个事务执行完成后再执行另一个事务,但处于性能上的考虑,一般都需要事务并发执行,就要求事务执行过程中不受到并行执行的事务的影响,例如不能读取到另一个未提交(提交就是指事务执行完成)事务写入的值。)
持久性(durability)
事务提交后,其修改永久保存在数据库中(但不可能有100%持久性保证)
原子性是基础,隔离性是手段,一致性是约束条件,目的是保持持久性。
隔离级别
Mysql标准中有四种隔离级别
未提交读
没有提交的事务的修改对其它事务可见。会发生脏读(事务读取未提交的数据)
提交读
没有提交的事务的修改对其它事务不可见,提交的事务的修改对其它事务可见。会发生不可重复度(两次执行相同查询可能结果不一样)
可重复读(innoDB默认)
在同一个事务上读取相同的记录的结果是一致的。会发生幻读(一个事务前后两次查询相同范围,后一次查询看到了前一次查询没有看到的行,原因是另一个事务中间插入了新的记录),innoDB和xtradb存储引擎通过了多版本并发控制(MVCC,multiversion concurrency control)解决了幻读问题
可串行化
在读取的每一行数据上加锁。避免了幻读,但导致了大量超时和锁争用问题
从上往下隔离级别越高,效率越低,越安全
死锁
如果两个事务都获得了一把锁,双方又需要获取对方已经获得的锁,这时会发生死锁。
innoDB目前处理死锁的方法是,将持有最少行级排他锁的事务进行回滚
死锁的产生可能与存储引擎有关
事务日志
使用事务日志,存储引擎在修改表的数据时,只要修改其内存拷贝,再把修改行为记录到硬盘上的事务日志上,在后台再慢慢地刷回到磁盘。通常称为预写式日志(wal,write-ahead logging),先写入日志,再写入磁盘,修改数据需要写两次磁盘。
事务只要能记录到日志并持久化成功,系统崩溃也不会丢失
Mysql的事务
Mysql有两种事务型存储引擎innoDB,NDB Cluster。还有第三方的,如XtraDB PBXT
MySQL在开启事务时会切换到延缓操作的状态:操作并不会立刻执行,commit时才会执行并切换为自动提交状态,rollback时会将延缓操作丢弃,释放申请到的锁(关键),切换为自动提交状态。
自动提交(autocommit)
Mysql默认采用自动提交(autocommit)模式。即如果不是显示开启一个事务,每次查询默认为一个事务
Mysql服务器不管理事务,事务由存储引擎实现。在同一个事务中使用多个存储引擎是不可靠的(如果在事务中混合使用了事务型和非事务型得存储引擎,在回滚时非事务型表无法撤销,事务的最终结果不确定,难以修复),mysql事务型对非事务型表回滚时会警告,通常不会有提示
隐式和显式锁定
innoDB采用两阶段锁定协议。事务执行过程中随时可以执行锁定,只有在执行commit或者rollback时同时释放所有锁(前面描述的锁都是隐式的,innoDB会根据隔离级别在需要的时候自动加锁,也支持特定的语句进行显式锁定,但不属于sql规范,应该尽量避免)
Mysql也支持lock tables和unlock tables语句,但由服务器实现,和存储引擎无关,但并不用于事务处理,使用事务还是要使用事务型存储引擎(除了事务中禁用了autocommit,可以使用lock tables外,不要显式使用lock tables)
相关文章:

MySQL夯实之路-事务详解
事务四大特性 事务需要通过严格的acid测试。Acid表示原子性,一致性,隔离性,持久性。 原子性(atomicity) 事务是不可分割的最小单元,对于整个事务的操作,要么全部提交成功,要么全部…...

安泰电子前置微小信号放大器怎么用的
前置微小信号放大器是一种重要的电子设备,用于放大微弱的输入信号,提高系统的灵敏度。它在各种领域中都有广泛的应用,包括音频、通信、测量等。在这篇文章中,我们将详细介绍前置微小信号放大器的使用方法,以便更好地理…...

【深度学习每日小知识】Overfitting 过拟合
过拟合是机器学习(ML)中的常见问题,是指模型过于复杂,泛化能力较差的场景。当模型在有限数量的数据上进行训练,并且学习了特定于该特定数据集的模式,而不是适用于新的、看不见的数据的一般模式时࿰…...

嵌入式必备的WEB知识
写在前面 嵌入式要学习Wed前端吗?答案是要的,不需要深入学习,只需要简单了解即可。为什么要学习? 原因如下: 可以远程控制和管理设备:通过简单的Web知识,嵌入式系统可以建立Web界面,…...
Scipy 中级教程——信号处理
Python Scipy 中级教程:信号处理 Scipy 的信号处理模块提供了丰富的工具,用于处理和分析信号数据。在本篇博客中,我们将深入介绍 Scipy 中的信号处理功能,并通过实例演示如何应用这些工具。 1. 信号生成与可视化 首先ÿ…...

【排序篇2】选择排序、计数排序
目录 一、选择排序二、计数排序 一、选择排序 整体思想: 从数组中选出最小值和最大值放在起始位置,直到排序完成 具体步骤: 定义两个变量begin和end为下标,指向数组始末定义要找的最大值的下标为maxi,最小值的下标为…...

重生奇迹mu敏弓加点攻略
1. 选择正确的属性点分配 在重生奇迹mu游戏中敏弓的属性点分配非常重要。建议将主要属性点分配在敏捷和力量上这样可以提高敏弓的攻击力和闪避能力。适当加点在体力和魔力上可以提高敏弓的生存能力和技能释放次数。不要忘记适当加点在智力上可以提高敏弓的技能威力和命中率。 …...

用通俗易懂的方式讲解:一文讲透主流大语言模型的技术原理细节
大家好,今天的文章分享三个方面的内容: 1、比较 LLaMA、ChatGLM、Falcon 等大语言模型的细节:tokenizer、位置编码、Layer Normalization、激活函数等。 2、大语言模型的分布式训练技术:数据并行、张量模型并行、流水线并行、3D …...

通过IP地址识别风险用户
随着互联网的迅猛发展,网络安全成为企业和个人关注的焦点之一。识别和防范潜在的风险用户是维护网络安全的关键环节之一。IP数据云将探讨通过IP地址识别风险用户的方法和意义。 IP地址的基本概念:IP地址是互联网上设备的独特标识符,它分为IP…...
汇编和C语言转换
C语言和汇编语言之间有什么区别 C语言和汇编语言之间存在显著的区别,主要体现在以下几个方面: 抽象层次: 汇编语言:更接近硬件的低级语言,通常与特定的处理器或指令集紧密相关。它提供了对处理器指令的直接控制,允许程序员直接操作硬件资源,如寄存器、内存等。 C语言:…...
【IOS】惯性导航详解(包含角度、加速度、修正方式的api分析)
参考文献 iPhone的惯性导航,基于步态。https://www.docin.com/p-811792664.html Inertial Odometry on Handheld Smartphones: https://arxiv.org/pdf/1703.00154.pdf 惯性导航项目相关代码:https://github.com/topics/inertial-navigation-systems use…...

Self-Attention
前置知识:RNN,Attention机制 在一般任务的Encoder-Decoder框架中,输入Source和输出Target内容是不一样的,比如对于英-中机器翻译来说,Source是英文句子,Target是对应的翻译出的中文句子,Attent…...

网络协议与攻击模拟_04ICMP协议与ICMP重定向
ICMP协议是网络层协议, 利用ICMP协议可以实现网络中监听服务和拒绝服务,如 ICMP重定向的攻击。 一、ICMP基本概念 1、ICMP协议 ICMP是Internet控制报文协议,用于在IP主机、路由器之间传递控制消息,控制消息指网络通不通、主机是…...
pytest-mock 数据模拟
文章目录 mock 测试unittest.mockMock类MagicMock类patch装饰器create_autospec函数断言的方法 pytest-mock 使用 mock 测试 在单元测试时,有些数据需要依赖其他服务或者不好获取到,此时需要使用mock来模拟对应的函数、对象等。 mock模拟数据的python…...

单片机原理及应用:定时器/计数器综合应用
本文是《单片机原理及应用》专栏中的最后一篇文章,笔者以编译器的安装配置——51单片机简介——LED和数码管外设——开关和按键控制功能切换——外部中断系统——定时器与计数器为知识大纲,介绍了C语言编程控制51单片机的入门教程。作为收尾,…...

R语言【paleobioDB】——pbdb_intervals():通过参数选择,返回多个地层年代段的基本信息
Package paleobioDB version 0.7.0 paleobioDB 包在2020年已经停止更新,该包依赖PBDB v1 API。 可以选择在Index of /src/contrib/Archive/paleobioDB (r-project.org)下载安装包后,执行本地安装。 Usage pbdb_interval (id, ...) Arguments 参数【..…...

阅读笔记lv.1
阅读笔记 sql中各种 count结论不同存储引擎计算方式区别count() 类型 责任链模式常见场景例子(闯关游戏) sql中各种 count 结论 innodb count(*) ≈ count(1) > count(主键id) > count(普通索引列) > count(未加索引列)myisam 有专门字段记录…...

小鼠的滚动疲劳仪-转棒实验|ZL-200C小鼠转棒疲劳仪
转棒实验|ZL-200C小鼠转棒疲劳仪用于检测啮齿类动物的运动功能。通过测量动物在滚筒上行走的持续时间,来评定**神经系统*病或损坏以及药物对运动协调功能和疲劳的影响。 疲劳实验中,让小鼠在不停转动的棒上运动,肌肉会很快进入疲劳状态&#…...

平衡搜索二叉树(AVL树)
目录 前言 一、AVL树的概念 二、AVL树的定义 三、AVL树的插入 四、AVL树的旋转 4.1、右单旋 4.2、左单旋 4.3、左右双旋 4.4、右左双旋 五、AVL树的验证 5.1、 验证其为二叉搜索树 5.2、 验证其为平衡树 六、AVL树的性能 前言 二叉搜索树虽可以缩短查找的效率&…...

2024年1月12日学习总结
学习目标 完成集中学习的readme 完成联邦学习的代码编写 边学习边总结 学习内容 Introduction to Early Stopping 1、Overfitting 过拟合是所有机器学习,深度学习中可能出现的一个比较严重的问题。具体表现就是:你的模型在训练集上处理的效果非常好&…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...