游乐游手机版
首页/科技数码/文章详情

InnoDB自增锁解析:MySQL表锁真相与优化策略

时间:2025-12-16 19:52
自增锁是一种特殊的表级别锁(table-level lock),专门针对事务插入AUTO_INCREMENT类型的列。 今天介绍InnoDB七种锁的第一种:自增锁(Auto-inc Locks)。一

自增锁(Auto-inc Locks)是一种特殊的表级锁,专门用于处理向含有AUTO_INCREMENT列的表插入数据的事务。

今天我们将深入探讨InnoDB七种锁类型中的第一种:自增锁。

一、案例场景分析

在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 into t(name) values(xxoo);

此时会生成一条(6, xxoo)的记录。

(4) 随后,事务A执行一条查询:

select * from t where id>3;

得到的结果集将是:

4, xxx
6, xxoo

这里出现了奇怪的现象:查询结果中竟然无法查看到id为5的记录。在RR隔离级别下,确实不应该读取到未提交事务所生成的数据。

但这对事务A来说就变得很诡异了:对于一个自增列,事务A连续插入了两条记录,第一条id是4,紧接着的一条却变成了6,中间仿佛凭空消失了一个id值,就像遇到了神秘的“幻影”。

三、自增锁的机制

自增锁正是为了解决这个问题而设计的。它是一种特殊的表级锁,专门控制在具有AUTO_INCREMENT列的表中进行插入操作的事务。在最简单的情况下,如果一个事务正在向表中插入记录,那么所有其他试图插入的事务都必须等待,以确保第一个事务插入的行能够获得连续的主键值。

正如MySQL官方文档所解释的那样:

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`配置参数,允许我们调整和改变这种锁的模式与具体行为。

四、假如不是自增列

回顾上面的案例,如果那张表的id列不是自增列,又会是怎样的情形呢?

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);

在这种情况下,就不再需要使用自增锁了。那么问题来了:

此时会使用什么锁呢?事务B又是否会被阻塞呢?

知其然,更要知其所以然。

理解问题的思路,往往比记住结论更为重要。

补充说明:本文讨论的MySQL知识基于5.6版本。

来源:https://www.51cto.com/article/832029.html
上一篇OpenAI开源GPT-oss模型系列:媲美GPT-4o,重磅发布 下一篇物联网大数据洞察:人工智能的深度学习应用
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
优必选CEO周剑:家庭机器人生态核心投入过半精力
科技数码 · 2026-07-01

优必选CEO周剑:家庭机器人生态核心投入过半精力

先说几个核心判断:优必选正在布局一盘长远战略。创始人兼CEO周剑在近期一场媒体沟通会上,直接亮出了公司未来的发展路线——工业、商用、家庭陪伴机器人三条业务主赛道并行推进,现阶段每条线各占约一半精力。一边是已经能够稳定创造收入的工业场景,另一边则是他眼中“最具想象力与未来空间”的家庭陪伴领域。工业人形

CPO/NPO/OIO开启封装级光连接价值空间,技术路线尚未收敛
科技数码 · 2026-07-01

CPO/NPO/OIO开启封装级光连接价值空间,技术路线尚未收敛

6月30日,申银万国在光连接系列研报中重点指出,MPO光连接器领域的投资机会值得高度关注。通俗来说,随着AI算力集群持续扩张,光互联升级带来的连锁效应——数据中心光纤通道数量、前面板端口密度、机柜内光纤管理复杂度——均在同步攀升。光连接器的角色早已超越传统的低价值标准件,如今它直接决定着链路插损、可

龙岗AR实景剧本游内测体验短板有效破解之道
科技数码 · 2026-07-01

龙岗AR实景剧本游内测体验短板有效破解之道

在今年龙岗区第二届人工智能与机器人发展大会上,区级部门一次性推出了7个AI“龙搭子”。其中,名为“龙导游”的成果成为文商旅融合领域的核心亮点。据南都N视频记者了解,依托“龙导游”打造的全区全域AR实景剧本游“龙岗大陆”,已在今年五一假期发布了内测版本。经过一个月市场验证后,该项目正式启动面向全社会的

南下资金6月30日净买入中芯国际与建滔积层板
科技数码 · 2026-07-01

南下资金6月30日净买入中芯国际与建滔积层板

6月30日,南下资金持续大举买入港股,单日净流入金额高达58 95亿港元。接下来,我们直接盘点哪些个股获得资金青睐、哪些遭到减持: 净买入方面,中芯国际领跑全场,单日吸金19 33亿港元;建滔积层板紧随其后,净买入10 59亿港元;腾讯控股获得7 65亿港元净流入;智谱(02513 HK)也有6 5

电动汽车电池新国标7月实施热失控不起火不爆炸
科技数码 · 2026-07-01

电动汽车电池新国标7月实施热失控不起火不爆炸

自2026年7月1日起,两项关乎电动汽车安全的核心强制性国家标准将正式实施,为行业加装“安全锁”——《电动汽车安全要求》(GB 18384-2025)与《电动汽车用动力蓄电池安全要求》(GB 38031-2025)同步落地。此次标准升级,从整车架构与电池系统两大维度,精准填补了近年来多起事故暴露出的