MySQL删除表中的所有行并将ID重置为零

我需要从表中删除所有行,但是当我添加一个新行时,我想要自动增量的主键ID分别从1开始,从0开始。

不要删除,使用truncate:

Truncate table XXX 

表处理程序不记得最后使用的AUTO_INCREMENT值,但从头开始计数。 即使对于MyISAM和InnoDB,这通常也不会重用序列值。

来源 。

如果你不能使用TRUNCATE (例如,由于外键约束),你可以在删除所有行后使用alter table来重新启动auto_increment:

 ALTER TABLE mytable AUTO_INCREMENT = 1 

如果表有外键,那么我总是使用以下代码:

 SET FOREIGN_KEY_CHECKS = 0; -- disable a foreign keys check SET AUTOCOMMIT = 0; -- disable autocommit START TRANSACTION; -- begin transaction /* DELETE FROM table_name; ALTER TABLE table_name AUTO_INCREMENT = 1; -- or TRUNCATE table_name; -- or DROP TABLE table_name; CREATE TABLE table_name ( ... ); */ SET FOREIGN_KEY_CHECKS = 1; -- enable a foreign keys check COMMIT; -- make a commit SET AUTOCOMMIT = 1 ; 

但差异将在执行时间。 看看Sorin的答案。

一个有趣的事实。

我确定TRUNCATE将始终performance更好,但在我的情况下,对于具有大约30个具有外键的表的数据库,只填充了几行,大约需要12秒来TRUNCATE所有表,而不是仅仅几百毫秒DELETE行。 设置自动增量总共增加了大约一秒,但仍然好很多。

所以我会build议尝试两个,看你的情况更快的作品。