MySQL中DELETE FROM table_a
和TRUNCATE TABLE table_a
之间有什么区别?
答案 0 :(得分:9)
答案 1 :(得分:1)
Delete允许您使用WHERE子句,因此只删除某些行。截断将删除所有行以及重置您可能拥有的任何auto_increment列。
答案 2 :(得分:1)
截断:
删除:
答案 3 :(得分:0)
截断重置id
计数,如果它自动递增
答案 4 :(得分:0)
不确定MySQL(这就是为什么我的答案是wiki)但我可以告诉你至少一个其他DBMS的一个区别。 delete from
命令用于表示事务(允许回滚)和触发器,这使得清除表的速度慢得多。另一方面,Truncate只是消灭了行而没有回滚的可能性,也没有在已删除的行上运行任何触发器。
答案 5 :(得分:0)
如果没有外键,truncate table
丢弃&重新创建表,这比删除单个行快得多。
truncate也会重置任何自动增量计数器。
截断表时,不会触发ON DELETE触发器。
更多信息可在MySQL online documentation。
中找到答案 6 :(得分:0)
使用delete删除的数据存储在临时表中,因此您可以使用带删除命令的事务,而truncate命令直接删除数据,因此您无法使用事务进行恢复(回滚)。 这就是截断比删除更快的原因。 Delete允许使用where子句,而Truncate则不允许。
答案 7 :(得分:0)
删除:
删除mysql分配的行和空格
数据可以再次回滚
你可以将它与WHERE子句一起使用
截断:
它类似删除。但不同之处在于您无法再次回滚数据而且您无法使用WHERE子句。