RRGT19 Asked: 2020-12-02 15:22:11 +0800 CST 2020-12-02 15:22:11 +0800 CST 2020-12-02 15:22:11 +0800 CST 为什么保存记录时我的 ID 列 AutoIncrement 不是从 1 开始? 772 id_usuario是PK、NN和AI 一开始,它确实从 1 开始,但我删除了所有记录,并通过我的 Java 程序保存了新记录,但记录不是从 1 开始,而是从我删除的最后一个记录数开始。 为什么记录不从数字 1 开始?它们从您之前删除的记录数开始。 java 3 Answers Voted Francisco Romero 2020-12-02T15:26:18+08:002020-12-02T15:26:18+08:00 这是因为该字段是 AUTO_INCREMENT。当一个字段是 AUTO_INCREMENT 时,它们从数字 1 开始计数,但是如果您删除记录,下一个 AUTO_INCREMENT,即使您已删除它,也将是您已删除记录的下一个。 例如,如果您有记录1, 2, 3, 4, 5并删除记录编号5,则 AUTO_INCREMENT 将从编号开始,6以进行下一次插入。 解释为什么 AUTO_INCREMENT 字段以这种方式工作: 我已经看到,在其他答案中,他们告诉您如何将现场记录AUTO_INCREMENT放回1. 但是,数据库会保存最后添加的记录的 id(即使您删除它们),因为它会产生安全和数据不一致问题。 我根本不建议您更改字段的 ID AUTO_INCREMENT。如果您这样做,请始终在测试环境中进行,并确保它不会影响相关表。永远不要在生产环境中运行它。 为什么?很容易。字段AUTO_INCREMENT通常用于将 ID 分配给表的元素,它们是 UNIQUE。想象一下在您的应用程序中使用 id 字段注册的用户表AUTO_INCREMENT,例如,作为论坛类型Stackoverflow。 现在假设数据库中有三个用户,ID 为 1 的用户创建了三个帖子。每个帖子都与该用户 1 相关联,因此将显示创建者的姓名。 随后,您从表中删除三个用户,并将该字段的值放回AUTO_INCREMENT值为 1。 现在您创建了一个新用户,并且修改了您的 AUTO_INCREMENT id 字段,这个新用户在数据库中注册了编号 1。因此,前一个用户创建的 ID 为 1 的三个帖子与新用户 ID 1,这是不正确的。 出于这个原因,我不建议您重新初始化 AUTO_INCREMENT 字段的值,除非您确定它不会在数据一致性方面影响数据库中的其余表(在前面的示例中,您会数据不一致,因为将为用户显示错误的数据,您已为其分配了先前已分配的 ID,并且该 ID 与其他表相关)。 Best Answer Miguel MG 2020-12-02T15:32:46+08:002020-12-02T15:32:46+08:00 你可以通过两种方式做到这一点: 只修改 AUTO_INCREMENT 的值 ALTER TABLE table_name AUTO_INCREMENT=1 您可以通过重置来清空表: TRUNCATE TABLE table_name; Phi 2020-12-02T15:26:56+08:002020-12-02T15:26:56+08:00 在内部,数据库管理器保留最后一个自动递增的 Id 的记录,再次从 1 开始,它是使用指令 ALTER TABLE tablename AUTO_INCREMENT = 1
这是因为该字段是 AUTO_INCREMENT。当一个字段是 AUTO_INCREMENT 时,它们从数字 1 开始计数,但是如果您删除记录,下一个 AUTO_INCREMENT,即使您已删除它,也将是您已删除记录的下一个。
例如,如果您有记录
1, 2, 3, 4, 5
并删除记录编号5
,则 AUTO_INCREMENT 将从编号开始,6
以进行下一次插入。解释为什么 AUTO_INCREMENT 字段以这种方式工作:
我已经看到,在其他答案中,他们告诉您如何将现场记录
AUTO_INCREMENT
放回1
. 但是,数据库会保存最后添加的记录的 id(即使您删除它们),因为它会产生安全和数据不一致问题。我根本不建议您更改字段的 ID
AUTO_INCREMENT
。如果您这样做,请始终在测试环境中进行,并确保它不会影响相关表。永远不要在生产环境中运行它。为什么?很容易。字段
AUTO_INCREMENT
通常用于将 ID 分配给表的元素,它们是 UNIQUE。想象一下在您的应用程序中使用 id 字段注册的用户表AUTO_INCREMENT
,例如,作为论坛类型Stackoverflow
。现在假设数据库中有三个用户,ID 为 1 的用户创建了三个帖子。每个帖子都与该用户 1 相关联,因此将显示创建者的姓名。
随后,您从表中删除三个用户,并将该字段的值放回
AUTO_INCREMENT
值为 1。现在您创建了一个新用户,并且修改了您的 AUTO_INCREMENT id 字段,这个新用户在数据库中注册了编号 1。因此,前一个用户创建的 ID 为 1 的三个帖子与新用户 ID 1,这是不正确的。
出于这个原因,我不建议您重新初始化 AUTO_INCREMENT 字段的值,除非您确定它不会在数据一致性方面影响数据库中的其余表(在前面的示例中,您会数据不一致,因为将为用户显示错误的数据,您已为其分配了先前已分配的 ID,并且该 ID 与其他表相关)。
你可以通过两种方式做到这一点:
ALTER TABLE table_name AUTO_INCREMENT=1
TRUNCATE TABLE table_name;
在内部,数据库管理器保留最后一个自动递增的 Id 的记录,再次从 1 开始,它是使用指令
ALTER TABLE tablename AUTO_INCREMENT = 1