首页 游戏 软件 资讯 排行榜 专题
首页
数据库
Mysql自增锁(Auto-incLocks)用法及说明

Mysql自增锁(Auto-incLocks)用法及说明

热心网友
67
转载
2026-04-19

MySQL自增锁:三种模式详解与选型指南

数据库中的自增ID是开发者再熟悉不过的概念。然而,当多个事务并发执行插入操作时,MySQL如何确保这些ID的唯一性和有序性?这背后依赖一个至关重要却常被忽视的机制——自增锁

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

简而言之,自增锁负责管理自增值的分配顺序与唯一性,它锁定的并非数据行,而是自增序列的“发号器”本身。自MySQL 5.1起,其行为可通过关键参数 innodb_autoinc_lock_mode 进行配置。该参数主要提供三种工作模式:0、1、2。

# 查看当前模式
SHOW VARIABLES LIKE 'innodb_autoinc_lock_mode';
# 运行时设置(重启后失效)
SET GLOBAL innodb_autoinc_lock_mode = 2;
# 在配置文件中永久设置
[mysqld]
innodb_autoinc_lock_mode = 1

1、模式0:传统模式

(1)核心特点

  • 任何插入操作都会立即获取一个表级AUTO-INC锁。这意味着一个事务执行插入时,其他所有插入操作都必须等待。
  • 自增ID的生成过程是完全串行化的,该锁会持续持有至当前插入语句执行结束。

此模式的优势在于,在单个事务内部,无论是批量插入还是多次单条插入,所产生的自增ID绝对连续,不受并发事务影响(因为其他事务均在排队)。但它无法保证整张表所有ID的全局连续性,因为事务回滚会导致已分配的自增值被“丢弃”,从而产生间隔。

(2)主要问题

  • 并发性能瓶颈显著。在高并发写入场景下,这个表级锁极易成为性能瓶颈,导致大量线程阻塞。

(3)常见理解误区

需要特别注意:模式0仅管理“并发插入时的ID分配顺序”,而无法处理“事务回滚后的ID回收”。

更明确地说:

  • 它确保了在单个事务内及多个事务间,ID均按申请顺序严格发放。
  • 然而,一旦事务回滚,已发放的自增值即告作废,不会被回收重用,从而产生“ID跳号”现象。

因此,再次强调:切勿依赖数据库自增ID来实现任何要求业务连续性的逻辑(例如要求订单号必须连续),这一原则适用于所有模式。

2、模式1:连续模式(默认模式)

此模式在性能与数据一致性之间取得了良好平衡,是大多数生产环境的默认推荐配置。

(1)工作原理

  • 简单插入(Simple INSERT):通常不施加表锁,性能优异。
  • 批量插入或数量不确定的插入:例如INSERT ... SELECTLOAD DATA,仍会使用AUTO-INC锁来确保该批次ID的连续性。
  • 此模式的核心承诺是:保证单条INSERT语句内部生成的自增值连续

那么,哪些属于简单插入?

-- 以下属于简单插入,通常使用轻量级锁或无锁
INSERT INTO t(a) VALUES (1);
INSERT INTO t(a) VALUES (1),(2);
-- 以下操作会触发AUTO-INC锁
INSERT INTO t(a) SELECT ... FROM another_table;
LOAD DATA INFILE ... INTO TABLE t;

(2)与模式0的关键区别

模式0保证一个事务内的所有插入ID连续。而模式1退让一步,仅保证单条INSERT语句内的ID连续。

原因在于:在此模式下,自增值的分配时机与事务提交时间点解耦,仅与“INSERT语句的执行顺序”紧密相关。因此,即使在同一个事务中执行两条独立的INSERT语句,其生成的ID也可能不连续。

通过以下示例可以清晰理解:

-- 1. 事务A插入第一条,获取id=1,事务未提交
BEGIN;
INSERT INTO t(v) VALUES ('A事务第一条');
-- 2. 事务B插入一条并提交,获取id=2
BEGIN;
INSERT INTO t(v) VALUES ('B事务');
COMMIT;
-- 3. 事务A插入第二条,获取id=3
INSERT INTO t(v) VALUES ('A事务第二条');
-- 4. 在事务A内查询,会发现id为1和3,中间的2已被事务B取走
SELECT id, v FROM t;
-- 结果可能:id:1, v:'A事务第一条'
--         id:3, v:'A事务第二条'

可见,自增计数器如同一个独立的发号器,按INSERT语句的执行顺序依次发放号码,而不关心该语句属于哪个事务。

3、模式2:交错模式(无锁模式)

(1)核心特点

  • 完全放弃使用AUTO-INC表锁,所有插入操作并发执行,性能达到最优。
  • 自增值仅保证全局唯一,不保证任何连续性

这是最激进的模式。在此模式下,即使是同一条INSERT语句插入的多行数据,其ID也可能出现乱序,即产生“跳号”。

(2)典型场景

-- 线程A执行
INSERT INTO t(a) VALUES ('A1'), ('A2');
-- 几乎同时,线程B执行
INSERT INTO t(a) VALUES ('B1'), ('B2');
-- 最终表中ID顺序可能出现交错:1, 3, 2, 4
-- 即:A1获取1,B1获取3,A2获取2,B2获取4

总结

简单总结:模式0(传统)追求极致的ID连续性,但严重牺牲并发性能;模式2(交错)追求极致的并发性能,但完全放弃连续性;而作为默认值的模式1(连续),则在两者间实现了巧妙平衡——对最常见的简单插入极为高效,仅在必要时才施加锁。

模式的选择最终取决于业务场景。若对性能要求极高,且能接受ID不连续(例如仅用作无业务意义的主键),模式2是理想选择。对于绝大多数要求单条语句内ID连续、同时需要良好并发能力的通用场景,默认的模式1是稳妥之选。至于模式0,除非存在特殊的兼容性或强一致性需求,否则在当今高并发环境下已较少使用。

希望本文能帮助你深入理解MySQL自增锁的工作原理,从而在数据库设计与性能优化中做出更明智的决策。

来源:https://www.jb51.net/database/3559080m5.htm
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

Clusterly AI
AI
Clusterly AI

Clusterly AI是什么 在内容创作领域,效率和质量常常难以兼得,而一款名为Clusterly AI的工具,正试图打破这个僵局。它由Clusterly公司开发,本质上是一个专为提升在线可见性而生的智能内容引擎。无论是内容创作者、独立博主,还是企业营销团队,都可以借助它快速生产出那些搜索引擎青睐

热心网友
04.20
海尔燃气热水器连不上wifi怎么办
电脑教程
海尔燃气热水器连不上wifi怎么办

海尔燃气热水器Wi-Fi连接失败?别慌,这通常不是机器故障 当您发现海尔燃气热水器无法连接Wi-Fi时,请不要急于联系售后维修。根据海尔官方技术报告与售后大数据分析,超过90%的联网问题并非热水器硬件损坏,而是由于网络配置步骤存在疏漏,或家庭无线网络环境未满足设备接入的特定要求。只要您能准确识别并避

热心网友
04.20
Ellmo Genzers
AI
Ellmo Genzers

Ellmo Genzers是什么 说起企业级的AI应用工具,现在市面上选择不少,但真正能把数据安全、功能实用和多语言支持这三件事同时做好的,其实并不多。今天要聊的Ellmo Genzers,就是由GenZ Technologies推出的一款专为组织设计的语言模型操作平台。它的目标很明确:帮助企业安全

热心网友
04.20
广交会“老面孔”汪和平:二十载坚守,见证中国外贸“破茧成蝶”新征程
科技数码
广交会“老面孔”汪和平:二十载坚守,见证中国外贸“破茧成蝶”新征程

在第139届广交会的展馆内 浙江诺特电器创始人汪和平的展位,面积不过十平方米,却总是围满了人。他正用一台双屏翻译机,和一位印度客商流畅地交流着产品细节。这位在饮水机外贸行业摸爬滚打了二十多年的企业家,早已习惯用科技工具打破沟通壁垒,再用差异化的产品,牢牢抓住全球采购商的目光。 时间拉回到2004年,

热心网友
04.20
松下按摩椅产地是泰国还是马来西亚?
电脑教程
松下按摩椅产地是泰国还是马来西亚?

松下按摩椅究竟是泰国制造还是马来西亚生产? 首先明确核心信息:松下按摩椅的主要生产基地在泰国,同时马来西亚工厂也承担部分型号的区域化组装任务。根据松下电器官方公布的全球制造布局,其东南亚地区的核心产能确实集中于泰国工厂。该生产基地自2010年代初期投入运营以来,一直负责中高端按摩椅系列的研发试制与批

热心网友
04.20