首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
软件与程序人生
›
DevOps与敏捷开发
›
MySQL知识点复习 - 事件篇
返回列表
发新帖
MySQL知识点复习 - 事件篇
[复制链接]
发表于 2026-1-29 00:44:41
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
MySQL知识点复习 - 事件篇
由于在线上真没用过MySQL,一样寻常用的都是PostgreSQL、Oracle和Sql Server,美满对八股文的神MySql没有一丝线上履历,故来小卷一手。
事件的特性是什么?
原子性:实验的任务要么是一次完成要么就是全部是失败,都会被回滚到事件前的状态
划一性:事件在操纵前和操纵后无论干了什么数据都是划一的
隔离性:防止多个事件并发的时间由于交织实验而导致数据差别等
长期性:事件处置惩罚竣事后对于数据的修改是永世长期性的
怎么实现的?
在MySQL的InnoDB引擎技能中,长期性是通过 redo log(重做
日志
)来包管的,原子性通过 undo log(回滚
日志
),隔离性通过MVCC(多
版本
并发控制)或是🔒机制来实现的。划一性则是通过上述是三个特性来完成的。
事件的隔离级别有哪些?
插播一条知识点:
在同时处置惩罚多个并发的时间,就会容易出现三种环境,
脏读:如果有一个事件读取到还没有提交的事件的时间,也就是脏读(由于这个事件大概会撤回)
不可重复读:
简单的明确就是连续读的数据都差别等
。就是当有此中一个事件,比如说是事件A,他自己search了一次数据,但是并没有什么操纵,然后事件B,操纵了提交了事件,修改了这个数据,当事件A再search一次这个数据的时间,发现数据已经差别等了,这个就是不可重复读。
幻读:(记载数目)
字面意思感觉产生了幻觉
。比如事件A在举行条件查询,根据这个条件筛选出来的数据照旧正常的,但是同时在事件B也在举行查询,这个时间各人都照旧正常的,就在这个时间,事件A开始偷偷对这个数据举行了操纵,然后事件B再举行一次查询的时间,发现怎么数据多了一条?这个就是幻读。(这听起来怎么跟不可重复读差不多?)但是,实在这个只有在一个事件内多次举行条件筛选条件时间出现的标题,才会叫做幻读。(而不可重复读只是单纯的多次读取同一个数据,这就是差异。)
读未提交:在事件还没有提交的时间,各人就能看到它已经修改了什么内容
这里就大概会出现脏读、不可重复读和幻读的征象,在提交之前如果挂了是不是就得全部回滚了
读提交:必要等全部的步调完成事件提交,各人才气看到终极的修改内容
这种就不会出现脏读的环境,那么是不是大概也会出现不可重复读和幻读的征象呢
可重复读:指在事件的实验过程时到事件开始的时间的数据都是划一的。
(MySQL默认的隔离级别)
这种环境会有大概出现幻读的环境
串行化:会对当条件交的事件先加上读写锁,当有多个事件进来,造成了读写辩说,背面来的事件就必须等前面的事件实验完毕了之后才气继续实验。
加锁导致的多半只是
性能
差,但是
安全
性肯定是高的
研究一下什么是MVCC
MVCC允许多个事件同时读取同一条数据,而不会相互壅闭,每个事件看到的
版本
都是事件开始时的数据
版本
,也就是说,每个人看到的数据,都是自己在操纵时开始看到的数据,换个意义来说这就黑白壅闭的读操纵。
Read View:简单的明确他就是一个数据快照,复杂的明确他就是一个类似于视图的东西吗?(这是我的明确),Read view内里会有几个字段,恣意捞几个出来分析一下:
creator_trx_id:创建这个read view事件的事件id
m_ids:在创建read view的时间,有一些事件启动了但是却还没有提交的事件的id列表,这个是列表,看字段名也是ids不是id。
min_trx_id:这个是m_ids的最小值
max_trx_id:创建read view的时间
数据库
预备给下一个事件预备的id值
插播小知识
在InnoDB引擎中,在每个表中都会有两个隐蔽的字段
trx_id:事件的id会存放在这个字段中
roll_pointer:指针列,指向旧版本的记载
创建Read View的时间,可以将trx_id分别为下面的这个版本链,以这种版本链的情势天生的就叫做MVCC多版本并发控制。
已提交事件 -> (天生min_trx_id最小的m_ids值)-> 已启动但未提交的事件 -> (天生max_trx_id最大的m__ids值)-> 还没有开始的事件
另有那么几种环境必要分析一下
当的trx_id小于Read view的最小值的时间,证实这个事件是之前的事件创建的read view,是已经提交了的事件,以是这条数据的终极版本我们是可以看到的。
当trx_id大于或便是read view的最小值的时间,证实这个事件是在创建read view后才天生的事件,以是这条数据的终极版本我们是还不可以看到的。
如果trx_id在ids的最小值和最大值之间的时间,就必要判定这个trx_id是不是在m_ids这个列表之中了
如果在列表中,证实这个照旧一个未提交的事件,以是是看不到终极的版本
如果不在列表中,证实这个事件已经被提交了,可以看到终极的版本。
wtf ?? 好复杂人被搞晕了
回复
使用道具
举报
返回列表
浏览过的版块
分布式数据库
云原生
SAAS
SQL-Server
物联网
数据仓库与分析
人工智能
Oracle
移动端开发
笑看天下无敌手
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表