DELETE、TRUNCATE、DROP的区别

定义:

truncate和delete只删除数据不删除表的结构;drop删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index),依赖于该表的存储过程/函数将保留,但是变为invalid(无效的)状态

区别:

1、delete一般用来删除表中的某一条或者一行数据,在不设置WHERE条件下可以删除表中的所有信息,将该操作保存在事务日志中在以后需要的时候还可以进行回滚操作。对表执行delete之后,该表不会减少表或者索引所占用的空间。
2、truncate是清空的意思,从字面就可以理解为一次删除就可以将表里的数据全部清除,没有回滚操作。对表执行truncate之后,表和索引就会恢复到初始的大小
3、drop可以将表的结构和数据内容都删除。对表执行drop之后,该表所占用的空间全部释放。
4、delete和truncate都是对数据进行操作,区别是范围不同。delete可以针对数据中的table、view两种类型。而truncate只能针对table类型。
5、速度上:drop>truncate>delete;
6、在没有备份的时候,尤其小心使用drop和truncate,删除部分数据行用delete带上where子句,回滚段要足够大。删除表用drop。想要保留表而将所有数据删除,如果和事务无关,用truncate即可,如果和事务有关,或者想触发trigger,还是用delete。如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据
7、delete是DML(数据操作语言)语句,执行后不会自动提交;drop、truncate都是DDL(数据定义语言)语句,执行后会自动提交。

你可能感兴趣的:(MySQL,数据库,mysql,sql)