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议尝试两个,看你的情况更快的作品。