当前位置:首页 >域名 >MySQL主键自增值为什么有“空洞”? 正文

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

来源:益强资讯优选   作者:系统运维   时间:2025-11-05 05:51:59

一.场景准备

测试场景为MySQL 8.0:主键重复场景唯一键重复场景1、空洞建表,主增值包含主键及唯一约束

复制CREATE TABLE t1(

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

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;1.2.3.4.5.6.7. 2、写入初始测试数据

复制insert into t1 (c1,空洞c2) values (a,1),(b,2),(c,3);

mysql> select * from t1;

+----+------+------+

| id | c1 | c2 |

+----+------+------+

| 1 | a | 1 |

| 2 | b | 2 |

| 3 | c | 3 |

+----+------+------+

3 rows in set (0.00 sec)1.2.3.4.5.6.7.8.9.10.11.

二.开始测试

insert into

复制# 测试主键重复

mysql> insert into t1 values (1,aaa, 111);

ERROR 1062 (23000): Duplicate entry 1 for key t1.PRIMARY

# 测试唯一键重复

mysql> insert into t1 (c1,c2) values(a, 4);

ERROR 1062 (23000): Duplicate entry a for key t1.uk_c11.2.3.4.5.6.7. insert ignore into

insert方式插入数据在处理过程中发生主键传统等错误时候,语句会被终止,主增值并告知错误的亿华云计算键自原因。而使用insert ignore的空洞方式进行数据插入,则会忽略插入错误的主增值行继续插入没有问题的b2b信息网行记录,最终以warning进行提示。键自

复制# 测试主键重复

mysql> insert ignore into t1 values (1,空洞aaa, 111);

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show warnings;

+---------+------+------------------------------------------+

| Level | Code | Message |

+---------+------+------------------------------------------+

| Warning | 1062 | Duplicate entry 1 for key t1.PRIMARY |

+---------+------+------------------------------------------+

1 row in set (0.01 sec)

# 测试唯一键重复

mysql> insert ignore into t1 (c1,c2) values(a, 4);

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show warnings;

+---------+------+----------------------------------------+

| Level | Code | Message |

+---------+------+----------------------------------------+

| Warning | 1062 | Duplicate entry a for key t1.uk_c1 |

+---------+------+----------------------------------------+

1 row in set (0.00 sec)1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.

在测试过程中惊奇地发现测试表中的主键自增列发生了改变,经过之前的WordPress模板主增值操作已经变成了7:

复制mysql> show create table t1\G

标签:

责任编辑:域名