当前位置:网站首页>MySQL事务隔离级别
MySQL事务隔离级别
2022-08-09 11:13:00 【Java技术债务】
目录
事务的概念
事务是逻辑上的⼀组操作,要么都执⾏,要么都不执⾏
事务的ACID
1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。
2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。
3、隔离性(Isolation):并行执行的两个事务的中间状态相互不可见
4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
事务的并发问题
- 脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
- 不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
- 幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
- 丢失修改(Lost to modify): 指在⼀个事务读取⼀个数据时,另外⼀个事务也访问了该数据, 那么在第⼀个事务中修改了这个数据后,第⼆个事务也修改了这个数据。这样第⼀个事务内的修 改结果就被丢失,因此称为丢失修改。
小结:不可重复读的和幻读很容易混淆
,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表
MySQL事务隔离级别
MySQL默认隔离级别是:可重复读
问题:事务是如何通过日志来实现的
事务日志
是通过redo
和innodb
的存储引擎日志缓冲(Innodb log buffer)来实现的,当开始一个事务的时候,会记录该事务的lsn(log sequence number)号;
当事务执行时,会往InnoDB存储引擎的日志的日志缓存里面插入事务日志;
当事务提交时,必须将存储引擎的日志缓冲写入磁盘(通过innodb_flush_log_at_trx_commit来控制),也就是写数据前,需要先写日志。这种方式称为“预写日志方式”
补充
- 事务隔离级别为读提交时,写数据只会锁住相应的行
- 事务隔离级别为可重复读时,如果检索条件有索引(包括主键索引)的时候,默认加锁方式是next-key 锁;如果检索条件没有索引,更新数据时会锁住整张表。一个间隙被事务加了锁,其他事务是不能在这个间隙插入记录的,这样可以防止幻读。
- 事务隔离级别为串行化时,读写数据都会锁住整张表
- 隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。
通知:MySQL MVCC实现机制将在下次讲解
边栏推荐
- ∘(空心的点乘)的数学含义
- Redis的下载安装
- uni-app 自带的picker封装一个日期-时间选择器
- End-to-End Object Detection with Fully Convolutional Network学习笔记
- C语言数组题_校门外的树_标记法
- es6Generator函数的异常处理
- 学习阶段总结(背包问题)
- Paper Sharing | ACL2022 | Argument Relation Extraction Based on Transfer Learning
- 美的数字化平台 iBUILDING 背后的技术选型
- log4net使用指南(winform版,sqlserver记录)
猜你喜欢
x86异常处理与中断机制(3)中断处理过程
wpf实现简易画板功能(带截取画板,签名截图等等)
matlab图像分割,从基因芯片荧光图像中提取阴性点(弱)和阳性点(强)
[现代控制理论]4_PhasePortrait爱情故事动态系统分析
CentOS6.5 32bit安装Oracle、ArcSde、Apache等配置说明
【VIBE: Video Inference for Human Body Pose and Shape Estimation】论文阅读
C语言统计不同单词数
enum in c language
vite的原理,手写vite
【Subpixel Dense Refinement Network for Skeletonization】CVPR2020论文解读
随机推荐
wpf path xaml写法和c#写法对比
ICML 2022 | Out-of-Distribution检测与深最近的邻居
FreeRTOS列表和列表项源码分析
Redis的下载安装
杂记(6)
Missing URI template variable ‘employeeNumber‘ for method parameter of type String
matlab图像分割,从基因芯片荧光图像中提取阴性点(弱)和阳性点(强)
爱可可AI前沿推介(8.9)
C语言中信号函数(signal)的使用
golang源代码阅读,sync系列-Map
CentOS6.5 32bit安装Oracle、ArcSde、Apache等配置说明
x86 Exception Handling and Interrupt Mechanism (3) Interrupt Handling Process
Open3D point cloud average point spacing evaluation
实现strcat函数
gdb tui的使用
[现代控制理论]5_系统的可控性_controllability
全网最简单解决OneNote中英字体不统一
golang 标准库json Marshal、Unmarshal坑
CAN总线发送数据
最长回文子串