mysql-drop、truncate和delete的区别?

一、DML与DDL的含义:

1、DML(Data Manipulation Language)数据操作语言-数据库的基本操作,SQL中处理数据等操作统称为数据操作语言,简而言之就是实现了基本的“增删改查”操作。

包括的关键字有:select、update、delete、insert、merge

2、DDL(Data Definition Language)数据定义语言-用于定义和管理 SQL 数据库中的所有对象的语言,对数据库中的某些对象(例如,database,table)进行管理。

包括的关键字有:create、alter、drop、truncate、comment、grant、revoke

 

二、DML与DDL的区别:

1.DML操作是可以手动控制事务的开启、提交和回滚的。

2.DDL操作是隐性提交的,不能rollback!

 

drop  表名

1、drop是DDL,会隐式提交,所以,不能回滚,不会触发触发器。

2、drop语句删除表结构及所有数据,并将表所占用的空间全部释放。

3、drop语句将删除表的结构所依赖的约束,触发器,索引,依赖于该表的存储过程/函数将保留,但是变为invalid状态。

 

truncate table 表名 

1、truncate是DDL,会隐式提交,所以,不能回滚,不会触发触发器。

2、truncate只删除数据,而不删除表的结构(定义)。当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小

3、对于外键(foreignkey )约束引用的表,不能使用 truncate table,而应使用不带 where 子句的 delete 语句。

 

delete from 表名

1、delete是DML,执行delete操作时,每次从表中删除一行,同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,

但要注意表空间要足够大,需要手动提交(commit)操作才能生效,可以通过rollback撤消操作。

2、delete只删除数据,而不删除表的结构(定义)。delete操作不会减少表或索引所占用的空间。

3、指定where子句,支持删除部分数据。

 

总结:

1、在速度上,一般来说,drop> truncate > delete。

2、在使用drop和truncate时一定要注意,虽然可以恢复,但为了减少麻烦,还是要慎重。

3、如果想删除表,当然用drop; 

     如果想保留表而将所有数据删除,并且和事务无关,用truncate即可;

     如果和事务有关,或者想触发trigger,还是用delete;

    如果想删除部分数据用delete,注意带上where子句,回滚段要足够大;

    如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。

 

mysql-drop、truncate和delete的区别?

上一篇:SQL 简介


下一篇:java--MySQL--数据库设计规范