【发布时间】:2010-12-20 06:11:17
【问题描述】:
DELETE FROM table_a 和 TRUNCATE TABLE table_a 在 MySQL 中有什么区别?
【问题讨论】:
-
我想,兄弟们,OP 的意思是删除 without where 子句。就像完全清空表格的两种方式有什么区别。
标签: mysql
DELETE FROM table_a 和 TRUNCATE TABLE table_a 在 MySQL 中有什么区别?
【问题讨论】:
标签: mysql
【讨论】:
Delete 允许您使用 WHERE 子句,以便仅删除某些行。截断将删除所有行并重置您可能拥有的任何 auto_increment 列。
【讨论】:
截断:
删除:
【讨论】:
Truncate 会重置 id 计数(如果它自动递增)
【讨论】:
不确定 MySQL(这就是我的答案是 wiki 的原因),但我可以告诉您至少一个其他 DBMS 的不同之处。 delete from 命令支持事务(允许回滚)和触发器,使其成为一种更慢的清除表的方式。另一方面,截断只是消除行而没有回滚的可能性,并且不对已删除的行运行任何触发器。
【讨论】:
如果没有外键,truncate table 会删除并重新创建表,这比删除单个行要快得多。
截断还会重置所有自动递增计数器。
当表被截断时,ON DELETE 触发器不会触发。
更多信息可以在MySQL online documentation找到。
【讨论】:
使用 delete 删除的数据存储在临时表中,因此您可以使用 delete 命令使用事务,而 truncate 命令直接删除数据,因此您无法使用事务(回滚)恢复。 这就是截断比删除快的原因。 Delete 允许使用 where 子句,而 Truncate 则不允许。
【讨论】:
删除:
删除mysql分配的行和空间
数据可以再次回滚
可以和WHERE子句一起使用
截断:
类似删除。但不同的是不能再次回滚数据,也不能使用 WHERE 子句。
【讨论】: