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

Dou*_*eux 19 mysql sql-delete sql-drop

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

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

chr*_*ris 22

drop table 将使用数据删除整个表

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

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

  • 删除数据是完全记录的操作.截断数据的记录最少 (3认同)

dav*_*vek 14

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

ALTER TABLE t2 AUTO_INCREMENT = value
Run Code Online (Sandbox Code Playgroud)


Kne*_*ZOD 5

   Drop会这样做....删除有问题的表,除非该表是另一个表的父表。

   删除将删除所有符合条件的数据;如果没有指定条件,它将删除表中的所有数据。
   截断类似于删除;但是,它会将 auto_increment 计数器重置回 1(或初始起始值)。但是,最好使用 truncate 而不是 delete ,因为delete会删除每一行的数据,因此比truncate 会降低性能。但是,除非在truncate之前将其关闭,否则truncate将不适用于强制执行参照完整性的InnoDB命令发出。
   所以,放松;除非您在桌子上发出drop命令,否则它不会被删除。