我需要从表中删除所有行,但是当我添加新行时,我希望主键ID (具有自动递增功能)分别从0和1重新开始。
发布于 2012-09-29 18:47:05
如果不能使用TRUNCATE
(例如,由于外键约束),则可以在删除所有行之后使用alter table重新启动auto_increment:
ALTER TABLE mytable AUTO_INCREMENT = 1
发布于 2015-10-14 02:31:10
如果表有外键,那么我总是使用以下代码:
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 ;
但不同之处在于执行时间。看看上面索林的答案。
发布于 2014-02-17 20:13:41
一个有趣的事实。
我确信TRUNCATE
总是会有更好的性能,但是在我的例子中,对于一个包含大约30个带有外键的表的数据库,只填充了几行,TRUNCATE
所有表需要大约12秒,而DELETE
这些行只需要几百毫秒。设置自动增量总共增加了大约一秒,但仍然要好得多。
所以我建议两个都试一试,看看哪一个更适合你的情况。
https://stackoverflow.com/questions/12651867
复制相似问题