网站设计公司飞沐,获取免费域名,本溪网站建设公司,网站建设报告一、delete 1、delete是DML#xff0c;执行delete操作时#xff0c;每次从表中删除一行#xff0c;并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚#xff08;rollback#xff09;和重做操作#xff0c;但要注意表空间要足够大#xff0c;需要手动提交…一、delete 1、delete是DML执行delete操作时每次从表中删除一行并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚rollback和重做操作但要注意表空间要足够大需要手动提交commit操作才能生效可以通过rollback撤消操作。 2、delete可根据条件删除表中满足条件的数据如果不指定where子句那么删除表中所有记录。 3、delete语句不影响表所占用的extent高水线(high watermark)保持原位置不变。 二、truncate 1、truncate是DDL会隐式提交所以不能回滚不会触发触发器。 2、truncate会删除表中所有记录并且将重新设置高水线和所有的索引缺省情况下将空间释放到minextents个extent除非使用reuse storage。不会记录日志所以执行速度很快但不能通过rollback撤消操作如果一不小心把一个表truncate掉也是可以恢复的只是不能通过rollback来恢复。 3、对于外键foreignkey 约束引用的表不能使用 truncate table而应使用不带 where 子句的 delete 语句。 4、truncatetable不能用于参与了索引视图的表。 三、drop 1、drop是DDL会隐式提交所以不能回滚不会触发触发器。 2、drop语句删除表结构及所有数据并将表所占用的空间全部释放。 3、drop语句将删除表的结构所依赖的约束触发器索引依赖于该表的存储过程/函数将保留,但是变为invalid状态。 总结 1、在速度上一般来说drop truncate delete。 2、在使用drop和truncate时一定要注意虽然可以恢复但为了减少麻烦还是要慎重。 3、如果想删除部分数据用delete注意带上where子句回滚段要足够大如果想删除表当然用drop如果想保留表而将所有数据删除如果和事务无关用truncate即可如果和事务有关或者想触发trigger还是用delete如果是整理表内部的碎片可以用truncate跟上reuse stroage再重新导入/插入数据。转载于:https://www.cnblogs.com/shihuibei/p/9519350.html