大数跨境
0
0

【收藏必备】MySQL AUTO_INCREMENT 工作原理详解:你真的懂自增主键吗?

【收藏必备】MySQL AUTO_INCREMENT 工作原理详解:你真的懂自增主键吗? Linux运维技术之路
2025-10-03
0
导读:【收藏必备】MySQL AUTO_INCREMENT 工作原理详解:你真的懂自增主键吗?

 










 

【收藏必备】MySQL AUTO_INCREMENT 工作原理详解:你真的懂自增主键吗?


一、什么是 AUTO_INCREMENT?

在 MySQL 中,AUTO_INCREMENT 是用来实现主键自增的一个属性。
只要你在 INSERT 时不指定该列的值,MySQL 会自动为它生成一个唯一的递增数字。

👉 举个例子:


   
    
   CREATE TABLE user (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50)
);

INSERT INTO
 user (name) VALUES ('Tom');
INSERT INTO
 user (name) VALUES ('Jerry');

得到的数据:


   
    
   id | name
1  | Tom
2  | Jerry

二、AUTO_INCREMENT 的工作原理

1. 自增计数器

  • • 每张表都会维护一个 自增计数器,记录当前的最大 ID 值。
  • • 插入新记录时,MySQL 会在最大值基础上 +1 作为新 ID。

2. 并发插入下的处理

  • • 在 InnoDB 存储引擎中,自增值的分配由一个 AUTO-INC 锁 控制。
  • • MySQL 5.7 之前:这个锁是表级锁,并发插入时可能阻塞。
  • • MySQL 8.0 之后:改进为 轻量级互斥锁,并发性能更高。

3. 删除记录不会回收 ID


   
    
   DELETE FROM user WHERE id = 2;
INSERT INTO
 user (name) VALUES ('Jack');

结果是:


   
    
   id | name
1  | Tom
3  | Jack

👉 自增 ID 不会因为删除记录而复用


4. 重启与恢复机制

  • • InnoDB 在 内存中缓存了自增值。
  • • 在 MySQL 5.7 及之前,重启后自增值可能回退,导致 重新分配 ID
  • • 在 MySQL 8.0 中,自增值会持久化到 redo log,重启后不会丢失。

5. 手动修改自增起始值


   
    
   ALTER TABLE user AUTO_INCREMENT = 1000;

下一次插入,id 就会从 1000 开始。


三、AUTO_INCREMENT 的注意事项

  1. 1. 唯一性保证
    • • AUTO_INCREMENT 必须和主键或唯一索引一起使用。
    • • 否则无法保证生成的值唯一。
  2. 2. 并发插入性能
    • • 大量并发插入时,可能成为瓶颈。
    • • 可以考虑分库分表后使用 分布式 ID(如雪花算法、UUID) 替代。
  3. 3. 多主复制(MGR / 主主复制)
    • • 多节点同时写入时,自增 ID 可能冲突。
    • • 解决办法:设置 auto_increment_increment 和 auto_increment_offset,让不同节点生成不重叠的 ID。

👉 举例(两主机):

  • • 节点 A:1, 3, 5, 7 …
  • • 节点 B:2, 4, 6, 8 …

四、总结一句话

  • • AUTO_INCREMENT 本质是自增计数器,由 InnoDB 管理,保证单机唯一性。
  • • 不会因为删除或回滚而回退,ID 永远递增。
  • • 多节点复制需要特殊配置,否则容易冲突。

🎯 面试必备回答:

AUTO_INCREMENT 是 MySQL 为每张表维护的自增计数器,插入时分配唯一递增 ID。
在 InnoDB 中由 AUTO-INC 锁控制并发,删除不会回收 ID,MySQL 8.0 之后自增值持久化到 redo log。
在主主复制场景下,需要通过 auto_increment_increment 和 auto_increment_offset 避免冲突。

 




 

 


往期回顾


【声明】内容源于网络
0
0
Linux运维技术之路
专注运维架构、高可用、高并发、高性能、大数据、容器化、数据库、python、devops等开源技术和实践的分享。
内容 347
粉丝 0
Linux运维技术之路 专注运维架构、高可用、高并发、高性能、大数据、容器化、数据库、python、devops等开源技术和实践的分享。
总阅读760
粉丝0
内容347