我需要删除表中的所有行,但是当我添加新行时,我希望具有自动增量的主键ID分别从0开始从1开始。
我需要删除表中的所有行,但是当我添加新行时,我希望具有自动增量的主键ID分别从0开始从1开始。
Answers:
不要删除,请使用截断:
Truncate table XXX
表处理程序不记得上一次使用的AUTO_INCREMENT值,而是从头开始计数。即使对于MyISAM和InnoDB,也是如此,它们通常不重用序列值。
来源。
如果您不能使用TRUNCATE
(例如由于外键约束),则可以在删除所有行以重新启动auto_increment之后使用alter表:
ALTER TABLE mytable AUTO_INCREMENT = 1
DELETE FROM tablename;
(但不打算工作做好时,有FK约束-见stackoverflow.com/a/5452798/507761)
如果表有外键,那么我总是使用以下代码:
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 ;
但是区别在于执行时间。看上面索林的答案。