博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL数据库事务各隔离级别加锁情况--Repeatable Read && MVCC(转)
阅读量:6524 次
发布时间:2019-06-24

本文共 784 字,大约阅读时间需要 2 分钟。

 

本文转自https://m.imooc.com/article/details?article_id=17289 感谢作者

上节回顾


上两篇记录了我对MySQL 事务 隔离级别 、MySQL 事务隔离级别  的理解。

这篇记录我对 Repeatable Read 的理解。

前言


MySQL在 read committed ,Repeatable Read 两个级别下都会使用到MVCC, 并且只在这两个级别下使用。

目录


1.单纯加锁是怎么实现 Repeatable Read 的?

2.真实的情况是什么样子的?

1.单纯加锁是怎么实现 Repeatable Read 的


1.多线程同时更新同一条记录,加X锁。所以并发场景下的 update 是串行执行的。

2.工业定义上的 select 一条记录,这个时候会在记录上加读共享锁(S锁),并到事务结束,因为在这种情况下才能实现记录在事务时间跨度上的可重复读。在读的时候不允许其他事务修改这条记录。
3.update 一条语句,这个时候会在记录上加行级排他锁(X锁),并到事务结束,这中场景下,其他读事务会被阻塞。

2.真实的情况是什么样子的?


读不影响写,写不影响读。

1.读不影响写:事务以排他锁的形式修改原始数据,读时不加锁,因为 MySQL 在事务隔离级别Read committed 、Repeatable Read下,InnoDB 存储引擎采用非锁定性一致读--即读取不占用和等待表上的锁。即采用的是MVCC中一致性非锁定读模式。因读时不加锁,所以不会阻塞其他事物在相同记录上加 X锁来更改这行记录。

2.写不影响读:事务以排他锁的形式修改原始数据,当读取的行正在执行 delete 或者 update 操作,这时读取操作不会因此去等待行上锁的释放。相反地,InnoDB 存储引擎会去读取行的一个快照数据。

转载地址:http://gwnbo.baihongyu.com/

你可能感兴趣的文章
JAVA多线程的问题以及处理【转】
查看>>
【Java面试题】10 abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?...
查看>>
简单记录一次ORA-00600 kcratr_nab_less_than_odr
查看>>
【视频教程】一步步将AppBox升级到Pro版
查看>>
[原]好玩的Linux,关于时间cal命令
查看>>
[ssh]SSH反向通道端口转发,在本地调试微信支付回调
查看>>
Linux学习之CentOS(十八)--与Linux文件和目录管理相关的一些重要命令②
查看>>
vim一些挺方便的功能
查看>>
开源Java时间工具类Joda-Time体验
查看>>
如何新建UML2项目?详细操作步骤介绍
查看>>
[精讲17] 组策略
查看>>
控制流
查看>>
interlij的快捷键
查看>>
如何在Rancher上运行Elasticsearch
查看>>
shell 找出数组元素中的最大值
查看>>
Vmware虚拟机linux系统混合模式上网
查看>>
MySQL在导入的时候遇到的错误
查看>>
存储初创公司Datera带着Amazon EBS走出隐身模式
查看>>
纵观视频监控市场这几个方面值得关注
查看>>
北大访问教授吴霁虹:如何把握AI产业化机遇并建立竞争优势 | CITE 2017
查看>>