删除,截断或删除以清除MySQL中的表

时间:2010-04-08 16:16:03

标签: mysql sql-delete sql-drop

我试图清理一个表,但没有摆脱表的实际结构。我有一个id列自动递增;我不需要保留ID号,但我确实需要它来保持其自动递增特性。我发现删除和截断,但我担心其中一个将完全删除整个表,使未来的插入命令无用。

如何从表中删除所有记录以便插入新数据?

4 个答案:

答案 0 :(得分:22)

drop table将删除整个数据表

delete * from table将删除数据,仅保留自动增量值。如果表中有大量数据,也需要一段时间。

truncate table将删除数据,重置自动增量值(但将它们保留为自动增量列,因此它将从1开始并再次从那里开始),并且非常快。

答案 1 :(得分:14)

TRUNCATE将重置您的自动增量种子(至少在InnoDB表上),尽管您可以在截断之前记下它的值,然后使用alter table进行相应的重新设置:

ALTER TABLE t2 AUTO_INCREMENT = value

答案 2 :(得分:2)

截断表是您正在寻找的 http://www.1keydata.com/sql/sqltruncate.html

答案 3 :(得分:0)

与纯InnoDB查询上的TRUNCATE相比,我遇到的一种情况是DELETE严重影响SELECT性能。

如果我删除所有行,然后重新填充表(100万行),则典型的查询需要1秒钟才能返回。

如果我改为截断该表并以完全相同的方式重新填充它,则典型的查询需要0.05秒才能返回。

YMMV,但是出于某种原因,我对MariaDB 10.3.15-MariaDB日志的删除似乎毁了我的索引。