运维开发网

truncate和delete的区别分析

运维开发网 https://www.qedev.com 2022-08-05 10:51 出处:网络
对于drop、truncate和delete虽然简单,但是真要使用或者面试时候问到还是需要有一定的总结,下面这篇文章主要给大家介绍了关于mysql中drop、truncate与delete区别的相关资

对于drop、truncate和delete虽然简单,但是真要使用或者面试时候问到还是需要有一定的总结,下面这篇文章主要给大家介绍了关于mysql中drop、truncate与delete区别的相关资


1. drop:删除数据库drop语句将表所占用的空间全释放掉。drop gt; truncate gt; delete

1:如果要删除的数据库存在,则删除成功。如果不存在,则会报告一个错误。

DROP DATABASE mytest1;

2:推荐。如果要删除的数据库存在,则删除成功。如果不存在,就默默结束,不报错。

DROP DATABASE IF EXISTS mytest1;


2. 对比 TRUNCATE TABLE 和 DELETE FROM

相同点:可以删除表中的所有数据,同时保留表结构。

差异:

TRUNCATE TABLE:一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的。DELETE FROM:一旦执行此操作,表数据可以全部清除(不带WHERE)。同时,数据是可以实现回滚的。


3. DDL 和 DML 的说明

①一次DDL(创建、删除、更改、截断等。)被执行,则不能回滚。SET autocommit = FALSE对于DDL操作无效。(因为DDL操作完成后,会执行一次提交。并且此提交操作不受SETautocommit = FALSE的影响。)

DML的默认条件(插入、删除、更新、选择等。)一旦执行就不可逆。但是,如果在执行DML之前执行SET autocommit = FALSE,则可以回滚DML操作。

1:删除数据后,恢复数据。


SET autocommit = FALSE;


DELETE FROM myemp3;


查询的数据是空


回滚数据


再次查询,可以看到恢复的数据。


2:截断表,数据操作无法回滚。


SET autocommit = FALSE;


TRUNCATE TABLE myemp3;


清除空数据。


回滚事情

rollback


查询后,数据不会恢复。



4.效率对比

速度方面,一般来说,dropgt截断gt;删除.

如果想删除部分数据用delete,注意带上where子句,回滚段要足够大;如果想删除表,当然用drop;如果想保留表而将所有数据删除,如果和事务无关(不能回滚),用truncate即可;如果和事务有关,或者想触发trigger,还是用delete;如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。truncate与drop是DDL语句,执行后无法回滚;delete是DML语句,可回滚。truncate只能作用于表;delete,drop可作用于表、视图等。truncate会清空表中的所有行,但表结构及其约束、索引等保持不变;drop会删除表的结构及其所依赖的约束、索引等。truncate会重置表的自增值;delete不会。truncate不会激活与表有关的删除触发器;delete可以。truncate后会使表和索引所占用的空间会恢复到初始大小;delete操作不会减少表或索引所占用的空间,drop语句将表所占用的空间全释放掉。


总结

关于mysql中drop、truncate和delete的区别的这篇文章到此为止。更多关于MySQL中Drop、truncate、delete的区别

0

精彩评论

暂无评论...
验证码 换一张
取 消