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

MySQL Delete all rows from table and reset ID to zero

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


不要删除,使用truncate:

The table handler does not remember the last used AUTO_INCREMENT value, but starts counting from the beginning. This is true even for MyISAM and InnoDB, which normally do not reuse sequence values.

资源。


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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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总是会表现得更好,但在我的情况下,对于一个包含大约30个带外键的表的数据库,只填充了几行,所有表都需要大约12秒才能到达TRUNCATE 几百毫秒到DELETE行。
设置自动增量总共增加了一秒,但它仍然好多了。

因此,我建议尝试两者,看看哪种方法更适合您的情况。