业务中发现某个表的主键ID不连续,而且这个业务并没有删除操作,难道被黑了?后来检查了代码,发现使用了INSERT ... ON DUPLICATE KEY UPDATE,发现了问题所在。
原因在于,当使用INSERT ... ON DUPLICATE KEY UPDATE时,无论是执行INSERT操作,还是UPDATE操作,都会导致auto increment自增1
测试实验
1)建立表
CREATE TABLE `test` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`date_num` int(11) NOT NULL DEFAULT '0' COMMENT '整数形式的日期',
`number` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '预约号ID',
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_date_num` (`date_num`)
) ENGINE=InnoDB COMMENT='预约号ID生产表'
2)执行语句和结果
INSERT INTO plan_storehouse_warehouse_booking(date_num) values(20191011)
on duplicate key update `number`=`number`+1
当date_num存在时&