MySQL里使用Innodb引擎自增主键不连续的问题

本文通过实例演示MySQL中自增主键ID跳号现象,并解释其背后原理,涉及INSERT与ON DUPLICATE KEY UPDATE操作及innodb_autoinc_lock_mode参数的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

举例说明:

CREATE TABLE `books` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(10) NOT NULL,
  `count` smallint(5) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;


插入数据

 insert into books set name='aaa';
 insert into books set name='bbb';
 insert into books set name='ccc';


此时自增主键最大值是3;
在进行重复主键的操作 ON DUPLICATE KEY UPDATE

 insert into books set name='ccc' ON DUPLICATE KEY UPDATE count=count+1;


再次插入一条数据

 insert into books set name='ddd';


此时自增主键最大值是5;
一直迷惑 4 去哪里了,今天终于让我找出原因了。 详情参看mysql的参数 innodb_autoinc_lock_mode
主要参考:
http://dinglin.iteye.com/blog/1279536
http://whitesock.iteye.com/blog/1329857
http://www.mysqlops.com/2011/12/05/innodb-auto-increment.html
http://hi.baidu.com/thinkinginlamp/item/a0320c82233c6c2a100ef3d0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值