news 2026/8/14 23:02:59

MySQL,InnoDB的auto-inc自增列,据说是表锁?(第6讲,长文收藏)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL,InnoDB的auto-inc自增列,据说是表锁?(第6讲,长文收藏)

《数据库架构100讲》

6. MySQL InnoDB锁:自增锁

今天介绍InnoDB七种锁的第一种:自增锁(Auto-inc Locks)。

一,案例说明

MySQL,InnoDB,默认的隔离级别(RR),假设有数据表:

t(id AUTO_INCREMENT, name);

数据表中有数据:

1, shenjian

2, zhangsan

3, lisi

事务A执行,还未提交

insert into t(name) values(xxx);

事务B执行:

insert into t(name) values(ooo);

问:事务B会不会被阻塞?

二,案例分析

InnoDB在RR隔离级别下,能解决幻读问题,上面这个案例中:

(1)事务A先执行insert,会得到一条(4, xxx)的记录,由于是自增列,故不用显示指定id为4,InnoDB会自动增长,注意此时事务并未提交;

(2)事务B后执行insert,假设不会被阻塞,那会得到一条(5, ooo)的记录;

此时,并未有什么不妥,但如果,

(3)事务A继续insert:

insert into t(name) values(xxoo);

会得到一条(6, xxoo)的记录。

(4)事务A再select:

select * from t where id>3;

得到的结果是:

4, xxx

6, xxoo

画外音:不可能查询到5的记录,在RR的隔离级别下,不可能读取到还未提交事务生成的数据。

咦,这对于事务A来说,就很奇怪了,对于AUTO_INCREMENT的列,连续插入了两条记录,一条是4,接下来一条变成了6,就像莫名其妙的幻影。

三,自增锁(Auto-inc Locks)

自增锁是一种特殊的表级别锁(table-level lock),专门针对事务插入AUTO_INCREMENT类型的列。最简单的情况,如果一个事务正在往表中插入记录,所有其他事务的插入必须等待,以便第一个事务插入的行,是连续的主键值。

画外音,官网是这么说的:

An AUTO-INC lock is a special table-level lock taken by transactions inserting into tables with AUTO_INCREMENT columns. In the simplest case, if one transaction is inserting values into the table, any other transactions must wait to do their own inserts into that table, so that rows inserted by the first transaction receive consecutive primary key values.

与此同时,InnoDB提供了innodb_autoinc_lock_mode配置,可以调节与改变该锁的模式与行为。

四,假如不是自增列

上面的案例,假设不是自增列,又会是什么样的情形呢?

t(id unique PK, name);

数据表中有数据:

10, shenjian

20, zhangsan

30, lisi

事务A执行,在10与20两条记录中插入了一行,还未提交

insert into t values(11, xxx);

事务B执行,也在10与20两条记录中插入了一行:

insert into t values(12, ooo);

这里,便不再使用自增锁,那:

(1)会使用什么锁?

(2)事务B会不会被阻塞呢?

知其然,知其所以然。

思路比结论更重要。

画外音:我学的MySQL知识基于5.6。

==全文完==

有架构合集吗?

《流量从10万到10亿,80个架构问题》

《关于即时通讯架构的一切!》

直播:每天只有30分钟,做什么副业合适?欢迎预约!

最近做了一个新产品:

70天,每天30分钟,短视频行动营(第二曲线最佳选择)

欢迎感兴趣的同学一起参与!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/13 16:00:34

Wechaty微信机器人开发:零基础打造智能消息处理专家

想要开发一个能够智能处理各种微信消息的机器人吗?Wechaty框架让这一切变得简单而高效!作为一款强大的微信机器人开发工具,Wechaty支持文本、图片、小程序、位置等丰富消息类型,即使是零基础开发者也能快速上手。本文将带你全面了…

作者头像 李华
网站建设 2026/8/13 22:00:32

使用conda安装PaddlePaddle时连接清华镜像源避免超时失败

使用 Conda 安装 PaddlePaddle 时连接清华镜像源避免超时失败 在深度学习项目启动阶段,最让人沮丧的不是模型跑不通,而是环境都装不上。尤其是当你兴冲冲打开终端,准备大干一场时,conda install paddlepaddle 却卡在“Solving en…

作者头像 李华
网站建设 2026/8/13 7:53:19

大数据领域数据产品的娱乐行业应用

大数据领域数据产品的娱乐行业应用关键词:大数据、娱乐行业、数据产品、用户画像、推荐系统、内容分析、预测模型摘要:本文深入探讨大数据技术在娱乐行业的创新应用。我们将从数据采集、处理到应用的全链路分析,重点介绍用户行为分析、内容推…

作者头像 李华
网站建设 2026/8/14 5:50:21

3步搞定虚拟桌宠性能优化:从卡顿到流畅的实战指南

3步搞定虚拟桌宠性能优化:从卡顿到流畅的实战指南 【免费下载链接】VPet 虚拟桌宠模拟器 一个开源的桌宠软件, 可以内置到任何WPF应用程序 项目地址: https://gitcode.com/GitHub_Trending/vp/VPet 你是否遇到过虚拟桌宠触摸响应迟钝、动画卡顿影响用户体验的…

作者头像 李华
网站建设 2026/8/13 23:52:51

9 个降AI率工具推荐,本科生论文查重优化神器

9 个降AI率工具推荐,本科生论文查重优化神器 论文写作的“三座大山”:时间、重复率与降重之痛 对于本科生来说,写论文从来不是一件轻松的事情。从选题到文献综述,再到撰写正文和反复修改,每一个环节都充满了挑战。尤其…

作者头像 李华
网站建设 2026/8/12 12:36:53

10 个降ai率工具推荐,本科生论文AI辅助神器

10 个降ai率工具推荐,本科生论文AI辅助神器 论文写作的困局:时间紧、任务重、降重难 对于大多数本科生来说,毕业论文不仅是一项学术任务,更是一场与时间赛跑的挑战。从选题到开题报告,从文献综述到实证分析&#xff0c…

作者头像 李华