seo优化:mysql 唯一键冲突会导致跳自增 id吗?mysql 唯一索引冲突会导致跳自增 id吗?

答案:会

比如你的表里面只有一条记录 id=1,然后再插入一条一模一样会出现唯一冲突的记录,会报错插入失败。

然后在插入一条不重复的。这条成功插入的 id=2 还是 id=3?

chatgpt 告诉我是 id=2

图片.png

但是实际上,在 mysql5.6 还是 mysql8.1,答案都是 id=3

我用于测试的 mysql 版本是 8.0.34
-- ideaboom.`user` definition

CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` int NOT NULL,
  `is_active` tinyint(1) NOT NULL,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

上面是建表语句

下面我们插入记录

INSERT INTO `user` (`name`, `age`, `is_active`, `created_at`, `updated_at`)
VALUES
('Alice', 25, 1, NOW(), NOW());

图片.png

此时有一条记录

立刻重新执行一下刚刚的 sql

INSERT INTO `user` (`name`, `age`, `is_active`, `created_at`, `updated_at`)
VALUES
('Alice', 25, 1, NOW(), NOW());

图片.png

SQL 错误 [1062] [23000]: Duplicate entry 'Alice' for key 'user.user_name'

插入失败,报错了

然后我们再插入一条全新的记录

INSERT INTO `user` (`name`, `age`, `is_active`, `created_at`, `updated_at`)
VALUES
('Liam', 23, 1, NOW(), NOW());

图片.png

可以看到,新插入的 id 变成 3 了,而不是 2

图片.png

这说明唯一键冲突也会浪费一个自增主键 id


但是 copilot 是可以正确回答的

图片.png

质谱 AI 也可以(就是 chatGLM3)

图片.png


universe_king
3.4k 声望680 粉丝