truncate、delete与drop的区别
相同点:
1.truncate和不带where子句的delete,以及drop都会删除表内的数据。
2.drop、truncate都是DDL语句(数据定义语言),执行后会自动提交。
不同点:
不同点:
1.truncate和delete只是删除数据不删除表的结构。drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index);依赖于该表的存储过程/函数将保留,但是变为invalid。 (总之一句话,truncate与delete都是删除全部的数据,但是表还存在,但是drop是全部删除,表不存在了)
2.就删除的速度来说:drop > truncate >delete 删除的时候truncate比delete使用的系统和事务日志资源少。delete语句每次删除一行,并在事务日志中为所删除的每行记录一项。truncate table通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
3.在安全的角度来讲:谨慎使用drop和truncate,尤其是没有备份的情况下,不让你哭都来不及了。谨慎。
使用上,想删除部分数据行用 delete,注意带上where子句. 回滚段要足够大.
想删除表,当然用 drop
想保留表而将所有数据删除,如果和事务无关,用truncate即可。如果和事务有关,或者想触发trigger,还是用delete。
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。
想删除表,当然用 drop
想保留表而将所有数据删除,如果和事务无关,用truncate即可。如果和事务有关,或者想触发trigger,还是用delete。
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。
truncate、delete与drop的区别
相同点:
1.truncate和不带where子句的delete,以及drop都会删除表内的数据。
2.drop、truncate都是DDL语句(数据定义语言),执行后会自动提交。
不同点:
不同点:
1.truncate和delete只是删除数据不删除表的结构。drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index);依赖于该表的存储过程/函数将保留,但是变为invalid。 (总之一句话,truncate与delete都是删除全部的数据,但是表还存在,但是drop是全部删除,表不存在了)
2.就删除的速度来说:drop > truncate >delete 删除的时候truncate比delete使用的系统和事务日志资源少。delete语句每次删除一行,并在事务日志中为所删除的每行记录一项。truncate table通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
3.在安全的角度来讲:谨慎使用drop和truncate,尤其是没有备份的情况下,不让你哭都来不及了。谨慎。
使用上,想删除部分数据行用 delete,注意带上where子句. 回滚段要足够大.
想删除表,当然用 drop
想保留表而将所有数据删除,如果和事务无关,用truncate即可。如果和事务有关,或者想触发trigger,还是用delete。
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。
想删除表,当然用 drop
想保留表而将所有数据删除,如果和事务无关,用truncate即可。如果和事务有关,或者想触发trigger,还是用delete。
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。