如何重置表的主键?

Kav*_*veh 52 mysql primary-key

在我的表中,tbphotos我有100条记录.然后我删除了所有记录,现在我想重新启动数据输入,我发现我的主键不是从1开始,而是从101开始,

有没有办法重置主键?

我正在使用MySQL管理员帐户.

Don*_*nie 89

alter table foo AUTO_INCREMENT = 1


Mar*_*ers 30

您可以像这样重置自动增量:

ALTER TABLE tablename AUTO_INCREMENT = 1
Run Code Online (Sandbox Code Playgroud)

但是如果你依赖于自动增量值,你的程序就会非常脆弱.如果需要为记录中的连续编号分配程序,则应为此创建单独的列,而不是为此目的使用数据库自​​动增量ID.

  • 你能解释为什么使用自动增量值会使你的程序变得脆弱. (11认同)
  • 在大多数情况下,您在URL中使用ID,例如yourapp.com/user/1。由于您的ID是自动递增的,因此有人可以假定ID 2的用户也可能存在。我将URL更改为/ user / 2,如果您不为此防御应用程序,则可能会产生意外的行为。这还会为您提供有关您的应用程序的信息,可以说user / 1000存在,这意味着您至少有1000个注册用户。物品,销售,订单等也一样。我可以在不了解您的情况下分析您的应用并创建统计信息,您不想泄漏这些信息,这就是您使用随机ID的原因。 (4认同)

小智 7

如果您已经在数据库中有一些数据,但想要在不删除数据的情况下将 ID 从 1 重置,则下面的代码是最好的。在 SQL 命令中复制并运行

ALTER TABLE members DROP ID;
ALTER TABLE members AUTO_INCREMENT = 1;
ALTER TABLE members ADD ID int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
Run Code Online (Sandbox Code Playgroud)


Vla*_*cic 5

如果您使用 TRUNC 而不是手动删除记录,您的主键将被重置。

  • @Slashterix - 文档另有说明:http://dev.mysql.com/doc/refman/5.7/en/truncate-table.html... 编辑:我刚刚意识到这个答案和评论有多老。 (2认同)
  • @ParrisVarney 谢谢,你是对的。我混淆了这里描述的行为 http://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html#innodb-auto-increment-initialization (2认同)