论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
数据库
›
Oracle
›
【后端面经-数据库】MySQL的事务隔离级别简介 ...
【后端面经-数据库】MySQL的事务隔离级别简介
惊落一身雪
金牌会员
|
2023-6-14 20:08:17
|
显示全部楼层
|
阅读模式
楼主
主题
857
|
帖子
857
|
积分
2571
目录
0. 事务的概念
1. 三类问题
2. 事务隔离级别
3. 操作指令
4. 总结
5. 参考博文
0. 事务的概念
事务指的是一连串的集中操作指令,一个事务的执行必须执行完所有的动作才能算作执行结束。事务具有四个特点,简记作ACID:
A-Atomicity: 原子性,事务的执行必须保证所有的动作都执行完毕;
C-Consistency: 一致性,事务的执行必须保证数据的一致性;
I-Isolation: 隔离性,事务的执行必须保证数据的隔离性;
D-Durability: 持久性,事务的执行必须保证数据的持久性。
而事务隔离级别则是在大型数据库多个事务执行的过程中,针对事务并行进行的机制设计,主要是围绕Isolation进行设计的。
1. 三类问题
脏读
过程:
事务A正在写某一行数据,未提交;
事务B并行读取该行数据,用于操作;
事务A撤销写操作,这是对于事务B来说,之前的读操作就是错误的。
读事务读取了写事务未提交的数据,而造成错误读取。
举例
小明今天发工资,一开始在财务系统上查询是工资50000元,很高兴地准备买新电脑,但是这是财务正在敲数据的时候一时疏忽,实际上工资只有5000元,财务在审核数据准备提交的时候发现了这个错误并修改过来,小明很失望。
这里的小明就是读事务,财务就是写事务。
不可重复读
过程:
事务B读取的是数据库中的某一行数据,用于操作;
事务A开始对这行数据进行写操作并完成,数据库的数据改变;
事务B再次读该数据库的这一行数据,发现数据改变;
读事务两次读同一行数据,但是两次读取的数据并不一致。
举例
小明和小红打赌,这个月工资是1k,两个人几乎同时发出查询请求,但是小明先读取到了原始数据是1k,而财务核对之后再次修改了工资为2k,小红在这之后才并发读取到工资是2k,两人认为读操作是并行的,同时进行,虽然知道这中间可能是财务进行了修改,但是两人都认为自己读取的才是最终数据,因此吵了起来。
幻读
过程
事务B读取数据库中的一批数据,用于操作;
事务A添加了一行数据,并完成操作,数据库的数据改变;
事务B再次读该数据库的数据,发现这一批数据改变;
读事务两次读取同一行数据,但是两次读取的数据不一致。(这和不可重复读操作是一致的)。
举例
小明被领导要求,改动财务系统上的ID数据格式,从A格式全都转为B格式,小明读取数据库中的数据之后开始修改,这时候,财务发现新来了一位员工叫小红,于是把小红的记录添加在财务系统上,ID格式依然是A格式。小明工作完成之后给领导看,领导却发现有一个人的数据没有改过来,很是恼火,把小明批评了一番。
幻读和不可重复读的区别
幻读是针对同一批数据,不可重复读针对的是同一行数据
2. 事务隔离级别
读未提交(read uncommitted)
一个事务在写某一行数据的时候,允许其他事务并行读取该行数据,但是不允许写该行数据;
允许多个事务并行读取数据库中的数据,但是不允许并行写入某一行数据;
可能会出现脏读:
解决方案:排他锁
读已提交(read committed)
一个事务在写某一行数据的时候,不允许其他事务读或者写该行数据;
允许多个事务并行读取数据库的数据;
可能都造成不可重复读:
可重复读(repeatable read)
一个事务在读数据的时候,其他事务不允许写,可以读。
一个事务在写数据的时候,其他事务不可以读或者写。
可能会造成幻读:
MySQL默认的隔离级别。
串行化(serializable)
一个事务一个事务串行执行,不允许任何事物并行;
能够解决幻读、不可重复读、脏读的问题;
成本高,一般不适用
3. 操作指令
查看当前的隔离级别
SELECT @@tx_isolation;
复制代码
设置隔离级别
set [glogal | session] transaction isolation level 隔离级别名称;//方式1
set tx_isolation='隔离级别名称';//方式2
``
复制代码
4. 总结
对前期的事务隔离级别做一个表格梳理
5. 参考博文
参考博文-1
参考博文-2
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
惊落一身雪
金牌会员
这个人很懒什么都没写!
楼主热帖
看完这个,还不会DVMA,请你吃瓜 ...
处理接口幂等性的两种常见方案 ...
腾讯叶聪:朋友圈爆款背后的计算机视觉 ...
图文结合带你搞懂InnoDB MVCC
一个故事看懂CPU的SIMD技术
Kubernetes(k8s)CNI(flannel)网络 ...
如何获取iphone的UUID
关于 Java 的简介(评论抽奖送书) ...
rust中的超时处理
聊一聊 TLS/SSL
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表