drop与truncate与delete的区别与联系
在mysql和oracle数据库中delete与truncate都是可以⽤来对数据进⾏删除操作,但是⼆者⼜有些不同。
主要有以下⼏个区别:
区别⼀:
根据sql语⾔分类来说,delete属于DML语⾔,也就是数据操作语⾔,⽽truncate属于DDL语⾔,也就是数据定义语⾔。
区别⼆:
delete不仅可以删除表中的数据,还可以删除基于真实表创建的视图中的数据。truncate则只能删除表中的数据,不能作⽤于视图。
区别三:
在数据库删除数据时,delete可以根据需要进⾏删除,也就是delete可以结合where条件进⾏精确的删除某⼀条数据,⽽truncate则不能⽀持where⼦句,如果作⽤于表,则是直接删除表所有数据。
区别四:
delete删除表时,会涉及到事务处理,也就是可以⽀持事务提交,回滚。所谓事务就是⽀持数据⼀致性,原⼦性,持久性,隔离性。当使⽤delete删除表数据时,⾸先它不会真正删除,⽽是会将删除的数据放⼊⼀个缓存区,可以通过回滚,从⽽恢复数据。但是使⽤truncate删除表中数据时,truncate不涉及事务处理,所以被truncate删除的数据是不可恢复的。
区别五:
由于delete删除数据涉及到事务处理,会涉及到缓存,当数据⾮常⼤时,有可能缓存不够⽤,所以这时使⽤delete删除数据可能达不到删除到的⽬的,⽽且速度特别慢。当涉及到⼤批量的数据时,truncate就⾮常适合,因为他不涉及到缓存,所以速度特别快,效率也⾼。
区别六:
有时候对数据操作可能涉及到触发器,⽤delete删除数据时则有可能会激活触发器,进⾏⼀些操作。⽽truncate是不存在触发器的处理的。
区别七:
在对于⼀些存在关联关系的表,使⽤delete删除数据时,可以运⽤sql的业务逻辑顺序来进⾏达到删除数据的⽬的。例如表A与表B存在⼀对多的关系,表A中id为主键,并且id在表B中是作为表B的外键。要删除数据,这时不能直接删除表B,⽽应该先删除表A在进⾏删除表B,这样就达到⽬的。drop删除表
⽽truncate不能删除对于由外键约束的表,它达不到删除该表的⽬的。
delete和truncate的应⽤场景
1.delete适⽤于数据量较⼩,对于性能要求不是很⾼的情况下,可以采⽤delete加上where⼦句进⾏删除数据。
2.如果需要考虑事务提交,回滚操作的,适合适⽤delete进⾏删除数据。
3.当涉及到⼤量数据,⽽且是不需要回滚的情况下,并且要求速度快,效率⾼,则可以使⽤truncate来删除数据。
delete和truncate是⽤来删除表数据的(但是保留表结构),⽽drop是⽤来删除整个表的,包括表结构和表内容,在sql语⾔分类上它是属于DDL语⾔。
他们执⾏的速度快慢关系:drop>truncate>delete。
最后,在企业级项⽬开发中,对于数据并不是真正的从物理上进⾏删除,⽽是进⾏逻辑上的删除,此时会对删除数据进⾏⼀个删除标识的处理,也就是说只是把数据从页⾯上隐藏了,⽤户暂时看不见了⽽已,其实数据是还存在的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论