drop,delete与truncate的区别
1.DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。以便回滚。
TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。
不记录在日志中,所以它不能激活触发器。
drop直接删掉表。
2.表和索引所占空间。
drop > truncate > delete
当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小,
DELETE操作不会减少表或索引所占用的空间。
drop语句将表所占用的空间全释放掉。
3.应用范围。
TRUNCATE 只能对TABLE;DELETE可以是table和view
TRUNCATE 和DELETE只删除数据,而DROP则删除整个表(结构和数据)。
truncate与不带where的delete :只删除数据,而不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);
依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。
4.作用失效
delete语句为DML(data maintain Language),这个操作会被放到 rollback segment中,事务提交后才生效。
如果有相应的 tigger,执行的时候将被触发。
truncate、drop是DLL(data define language),操作立即生效,
原数据不放到 rollback segment中,不能回滚
5.选择
要删除部分数据行采用delete+where
要删除表用drop;
若想保留表而将表中数据删除:
如果于事务无关,用truncate即可实现。
如果和事务有关,或老师想触发trigger,还是用delete。