delete、drop和truncate的区别
数据库中删除的三种语句:
Delete:⽤于删除表中的⾏,可以删除某⼀⾏,也可以在不删除表的情况下删除所有的⾏。
Drop:⽤于删除表,将表的结构、属性、索引全部删除。
Truncate:⽤于删除表内的数据,仅删除表内数据,不删除表本⾝。
数据库中删除语句的相同点:
truncate和不带where⼦句的delete都能删除表中的全部⾏。
truncate和delete只删除表数据,保留表结构。
truncate和drop都是DDL。
数据库中删除语句的不同点:
truncate table⽐ delete table速度快,且使⽤的系统和事务⽇志资源少。
delete语句执⾏删除的过程是每次从表中删除⼀⾏,并且同时将该⾏的删除操作作为事务记录在⽇志中保存以便进⾏进⾏回滚操作。
truncate table 则⼀次性地从表中删除所有的数据并不把单独的删除操作记录记⼊⽇志保存,删除⾏是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执⾏速度快。truncate和drop都是DDL操作⽴即⽣效(隐式提交),原数据不放到rollback segment中,不能回滚。
delete是DML会先将所删除的数据缓存到rollbacksegment中,事务提交之后才⽣效。
truncate table是删除内容,释放空间,但不删除定义。
delete table是删除内容不删除定义,不释放空间。
drop table是删除内容和定义,释放空间
表和索引所占空间:
truncate操作后,这个表和索引所占的空间会恢复到初始⼤⼩。
delete操作不会减少表或索引所占⽤的空间。
drop语句将表所占⽤的空间全部释放。
应⽤范围:
truncate只能对table。
delete可以是table和view。
truncate和delete只删除数据,drop则删除整个表(结构和数据)。
truncate与不带where的delete :只删除数据,⽽不删除表的结构(定义)。drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。
delete删除表格还是内容在速度上drop>truncate>delete。
总结
表是⼀本书,delete是根据条件撕下书的内容,truncate是把书的内容撕下来烧了,drop是把书烧了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。