Mysql 如何重置表的主键?

Mysql 如何重置表的主键?,mysql,primary-key,Mysql,Primary Key,在我的表格tbphotos中,我有100条记录。然后我删除了所有记录,现在我想重新启动数据输入,我看到我的主键不是从1开始的,而是从101开始的 有没有办法重置主键 我使用的是MySQL管理员帐户。alter table foo AUTO_INCREMENT=1您可以按如下方式重置自动增量: ALTER TABLE tablename AUTO_INCREMENT = 1 但是如果您依赖于自动增量值,那么您的程序非常脆弱。如果您需要为记录分配连续编号以使程序正常工作,则应为此创建一个单独的列,

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

有没有办法重置主键


我使用的是MySQL管理员帐户。

alter table foo AUTO_INCREMENT=1
您可以按如下方式重置自动增量:

ALTER TABLE tablename AUTO_INCREMENT = 1

但是如果您依赖于自动增量值,那么您的程序非常脆弱。如果您需要为记录分配连续编号以使程序正常工作,则应为此创建一个单独的列,而不是为此使用数据库自动增量ID。

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

如果数据库中已有一些数据,但希望从1重置ID而不删除数据,则下面的代码是最好的。复制并在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;

这是重置自动增量的最佳脚本:


altertablefoo修改列increment int(11)notnull AUTO_increment,AUTO_increment=1

TRUNCVATE不会重置INNODB上的自动idtables@Slashterix-文件另有规定:。。。编辑:我刚刚意识到这个答案和评论有多老了。@ParrisVarney谢谢,你是对的。我把这里描述的行为弄糊涂了。你能解释一下为什么使用自动递增值会使你的程序变得脆弱吗。@MarkByers我们有没有可能得到上述评论的答案。大多数时候你在URL中使用ID,比如yourapp.com/user/1。由于您的ID是自动递增的,所以有人可以假定ID为2的用户也可能存在。我将URL改为/user/2,如果你不保护你的应用程序不受此影响,可能会出现意外行为。这也会给你关于你的应用程序的信息,假设user/1000存在,这意味着你至少有1000个注册用户。商品、销售、订单等也一样。我可以在你不知情的情况下分析你的应用程序并创建统计数据,你不想“泄露”这些信息,这就是为什么你使用随机ID。为什么有更好的ID时你会回答更多