专栏首页架构师之路InnoDB行锁,如何锁住一条不存在的记录?

InnoDB行锁,如何锁住一条不存在的记录?

InnoDB,5项最佳实践,知其所以然?》发布后,不少同学留言希望讲讲MySQL的InnoDB行锁机制。要细聊MySQL的行锁,难以避免的要从事务的四种隔离级别说起。

四种隔离级别,又脱不开聊读脏,不可重复读,读幻象等问题。

事务隔离级别,行锁机制等都比较垂直,应用开发中大部分同学都用不到,不确定是否大部分朋友都感兴趣。

今天,先抛出一个问题,如果大家确定对这类话题感兴趣的话,后续我花时间细聊这一系列问题。

MySQL默认的事务隔离级别是 Repeated Read (RR),假设使用的存储引擎是InnoDB,在这个隔离级别下:

(1)读取到数据,都是其他事务已提交的数据;

(2)同一个事务中,相同的连续读,得到的结果应该是相同的;

(3)不会出现insert幻象读;

假设有数据表:

t(id int PK, name);

假设目前的记录是:

10, shenjian

20, zhangsan

30, lisi

Case 1

事务A先执行,并且处于未提交状态:

update t set name=’a’ where id=10;

事务B后执行:

update t set name=’b’ where id=10;

因为事务A在PK id=10上加了行锁,因此事务B会阻塞。

Case 2

事务A先执行,并且处于未提交状态:

delete from t where id=40;

事务A想要删除一条不存在的记录

事务B后执行:

insert into t values(40, ‘c’);

事务B想要插入一条主键不冲突的记录

问题1:事务B是否阻塞?

问题2:如果事务B阻塞,锁如何加在一条不存在的记录上呢?

问题3:事务的隔离级别,索引类型,是否对问题1和问题2有影响呢?

如果大家对这些问题感兴趣,后续我花时间深入梳理逻辑,画图细聊。

如果不感兴趣,我换数据库应用层架构的话题。

是不是很有意思的一个问题?

猜猜InnoDB的行锁是怎么做到的?

本文分享自微信公众号 - 架构师之路(road5858)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 多库多事务降低数据不一致概率

    一、案例缘起 我们经常使用事务来保证数据库层面数据的ACID特性。 举个栗子,用户下了一个订单,需要修改余额表,订单表,流水表,于是会有类似的伪代码: star...

    架构师之路
  • 数据库中间件Atlas调研笔记

    前篇: 《假如让你来设计数据库中间件》 《数据库中间件TDDL调研笔记》 《数据库中间件cobar调研笔记》 《数据库中间件mysql-proxy调研笔记》 1...

    架构师之路
  • 分布式事务,有解吗?

    CURD table t_account; any Exception rollback;

    架构师之路
  • MySQL是怎么读数据的——多版本并发控制

    我在之前的文章中(【MySQL入门】之MySQL数据库的锁机制(一),【MySQL入门】之MySQL数据库的锁机制(二))介绍了MySQL的全局锁、表锁和行锁,...

    MySQL数据库技术栈
  • Mysql二阶段锁与死锁、连接池与临时表 & Redis为何缓存大批量错误数据

    这期要分享的内容,是上周我在项目中遇到的问题。我选了三个我认为比较重要的分享给大家。

    wujiuye
  • 面试进阶-数据库中的锁

    编程时会用到很多锁,在另一篇文章中有介绍。大部分锁的名字被翻译的很好,例如表锁、行锁、意向锁,见名能知其意。锁的数量很多,锁之间的关系又很复杂,导致学习曲线非常...

    sibenx
  • 玩转分布式事务系列 - 可靠消息解决跨库转账问题

    第7步执行成功之后,网络出问题了,第8步会提交失败,此时的结果是:A库资金减少了100,B库资金却没有增加;这是一个网络问题导致了我们业务失败了,网络因素是程序...

    路人甲Java
  • Tornado入门(三)【协程】

    在Tornado中,协程是推荐使用的异步方式。协程使用yield关键字暂停或者恢复执行,而不是回调链的方式。

    用户2936342
  • 业务复杂、数据庞大、应用广怎办?了解下分布式事务的解决思路!

    随着行业IT应用的业务复杂度提升、数据级日渐庞大、应用面越来越广、并发压力也越来越高。为了应对这样的情况,分布式系统的解决方案随之而出,成为目前主流架构模式。当...

    嘉为科技
  • IJCAI 2019 提前看 | 神经网络后门攻击、对抗攻击

    近年来,深度学习在计算机视觉任务中获得了巨大成功,但与此同时,神经网络的安全问题逐渐引起重视,对抗样本热度持续不下,神经网络后门攻击也悄然兴起。本文选取了 IJ...

    机器之心

扫码关注云+社区

领取腾讯云代金券