gpt4 book ai didi

mysql - 为什么 MySQL auto_increment 会跳过数字

转载 作者:行者123 更新时间:2023-11-29 14:59:27 27 4
gpt4 key购买 nike

我们正在将现有产品表导入到我们自己的新表中。我们编写的导入脚本运行完美,并插入了正确数量的行(6000 左右)。但是,导入后,下一个自动递增的主键/id 比表中的行数高出 1500 个条目(左右)。

我们无法理解 MySQL 为什么要这样做,我们希望它停止。我已经在网上进行了常规搜索以寻求帮助,但我一无所获 - 有什么想法吗?

最佳答案

让我们以这个简单的表格为例:

CREATE TABLE `products` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(64) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;

并导入如下所示的文件:

"id","name"
1,"product 1"
2,"product 2"
5,"product 3"
102,"product 4"

然后您将数据导入到两列中,因此自动递增机制不起作用。导入所有行后,表的自动增量值将设置为 MAX(id)+1 [在本例中为103],以确保下一个自动增量 id 是唯一的。如果它等于插入的行数,则下一个自动增量值将为 5 并且将与第 3 行发生冲突。

如果您希望干净的开始和最后一个 id 等于行数,则必须从 .csv 文件中删除“id”列,或者创建不带 AUTO_INCRMENT 的表 对于id,导入数据并运行这个简单的sql:

SET @i=0;
UPDATE `products` SET id=@i:=@i+1 ORDER BY id;
ALTER TABLE `products` CHANGE COLUMN `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT FIRST;

第一个查询设置辅助变量,该变量将在更新记录之前递增。第二个更新记录,使其 id 等于行号。第三步将更改 id 列以自动递增,并为下一个自动索引设置适当的值。

但是在更改任何主键之前,请确保它们没有在任何其他表中用作外键!

关于mysql - 为什么 MySQL auto_increment 会跳过数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3650731/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com