我试图清理一个表,但没有摆脱表的实际结构。我有一个id
列自动递增;我不需要保留ID号,但我确实需要它来保持其自动递增特性。我发现删除和截断,但我担心其中一个将完全删除整个表,使未来的插入命令无用。
如何从表中删除所有记录以便插入新数据?
答案 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日志的删除似乎毁了我的索引。