首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySQL删除表中的所有行并将ID重置为零

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

Stack Overflow用户
提问于 2012-09-29 18:18:45
回答 4查看 288.5K关注 0票数 200

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

EN

回答 4

Stack Overflow用户

发布于 2012-09-29 18:47:05

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

代码语言:javascript
复制
ALTER TABLE mytable AUTO_INCREMENT = 1
票数 94
EN

Stack Overflow用户

发布于 2015-10-14 02:31:10

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

代码语言:javascript
复制
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 ;

但不同之处在于执行时间。看看上面索林的答案。

票数 18
EN

Stack Overflow用户

发布于 2014-02-17 20:13:41

一个有趣的事实。

我确信TRUNCATE总是会有更好的性能,但是在我的例子中,对于一个包含大约30个带有外键的表的数据库,只填充了几行,TRUNCATE所有表需要大约12秒,而DELETE这些行只需要几百毫秒。设置自动增量总共增加了大约一秒,但仍然要好得多。

所以我建议两个都试一试,看看哪一个更适合你的情况。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12651867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档