MySQL主键自增值为什么有“空洞”?

  • 1.场景准备
  • 2.开始测试
  • 3.问题分析
  • 4.问题拓展

本文在测试 insertinsert ignorereplace into 三种数据插入方式的时候,发现插入数据的时候在表内存在带有“唯一特性”的值重复的情况下三种语句的处理方式。最终发现了MySQL主键自增值“空洞”了

1.场景准备

测试场景为MySQL 8.0:

  • 主键重复场景
  • 唯一键重复场景

1、建表,包含主键及唯一约束

 CREATE TABLE t1(  id int(11) NOT NULL auto_increment,  c1 varchar(64) DEFAULT NULL,  c2 int(11) DEFAULT NULL,  PRIMARY KEY (id),  UNIQUE KEY uk_c1 (c1)) ENGINE=InnoDB DEFAULT CHARSET=utf8;