seo优化:mysql 唯一键冲突会导致跳自增 id吗?mysql 唯一索引冲突会导致跳自增 id吗?
答案:会
比如你的表里面只有一条记录 id=1,然后再插入一条一模一样会出现唯一冲突的记录,会报错插入失败。
然后在插入一条不重复的。这条成功插入的 id=2 还是 id=3?
chatgpt 告诉我是 id=2
但是实际上,在 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());
此时有一条记录
立刻重新执行一下刚刚的 sql
INSERT INTO `user` (`name`, `age`, `is_active`, `created_at`, `updated_at`)
VALUES
('Alice', 25, 1, NOW(), NOW());
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());
可以看到,新插入的 id 变成 3 了,而不是 2
这说明唯一键冲突也会浪费一个自增主键 id
但是 copilot 是可以正确回答的
质谱 AI 也可以(就是 chatGLM3)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。