数据库中drop和delete的区别

作者&投稿:段干孔 (若有异议请与网页底部的电邮联系)
SQL 语句里delete 和drop有什么区别~

一、删除内容不同
1、delete:只删除数据不删除表的结构。
2、drop:句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index)。
二、语句效果不同
1、delete:是数据库操作语言(dml),这个操作会放到 rollback segement 中,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发。
2、drop:是数据库定义语言(ddl),操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发 trigger。


三、删除空间影响不同
1、delete:不影响表所占用的 extent,高水线(high watermark)保持原位置不动。
2、drop:语句将表所占用的空间全部释放。

参考资料来源:百度百科-SQL语句大全
参考资料来源:百度百科-sql语句

delete
是dml语句,drop是ddl语句
delete只删除记录,不删除表空间;drop从表空间中删除该表,使该表结构不再存在。
delete执行后需要commit提交才生效,drop不需要手动提交,执行完立即生效

数据库中drop和delete的区别为:删除不同、操作不同、操作对象不同。

一、删除不同

1、drop:drop主要用于删除数据结构,包括内部的数据内容。

2、delete:delete主要用于删除数据内容,不删除数据结构。

二、操作不同

1、drop:drop操作不放到rollbacksegment中,不能回滚,操作不触发trigger。

2、delete:delete操作会放到rollbacksegement中,在事务提交后生效,执行时触发相应的trigger。

三、操作对象不同

1、drop:drop的操作对象可以是数据库,也可以是数据库中的数据表。

2、delete:delete的操作对象只能是数据库中的数据表。



1. truncate和 delete只删除数据不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的
存储过程/函数将保留,但是变为invalid状态.
2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,
执行的时候将被触发.
truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发
trigger.
3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动
显然drop语句将表所占用的空间全部释放
truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate
会将高水线复位(回到最开始).
4.速度,一般来说: drop> truncate > delete
5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及.
使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.
想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还
是用delete.

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

总结:
DROP用于删除表,数据库等.
TRUNCATE和DELETE都是删除表数据.
但是TRUNCATE相当于初始化,比如如果有自增长ID,用TRUNCATE删除后,自增长Id会从1开始,(truncat会释放表所占的空间)
而delete则不会.

sql中delete,drop ,truncate都代表删除,但3者又有一些区别
1. truncate和 delete只删除数据不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.
2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.
truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动
显然drop语句将表所占用的空间全部释放
truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始).
4.速度,一般来说: drop>; truncate >; delete
5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及
使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.
想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据

在实际应用中,三者的区别是明确的。
当你不再需要该表时, 用 drop;
当你仍要保留该表,但要删除所有记录时, 用 truncate;
当你要删除部分记录时(always with a WHERE clause), 用 delete.

而alter是对表结构的修改.
希望对你理解有帮助。

drop 是删除表定义,包括依附于此表的索引、外键等等,当然表的数据无处可存了。对应的是create table
delete 是删除数据,可以增加where条件,按条件删除,而不动表结构。对应的操作是insert(插入数据)

208_9316讲授数据库基础_110delete、truncate、drop的区别



...库脚本为“drop to ”和直接将该数据库 delet 有什么区别?
答:生成的两个脚本不同。delete是删除数据表中的数据,不会破坏表本身的结构 而drop是将数据表及数据一并删除,会破坏表结构

SQL试题求解
答:4.2 在stu数据库的student表中创建列名为姓名,家庭住址的视图student_view 4.3