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,这样就达到目的。

而truncate不能删除对于由外键约束的表,它达不到删除该表的目的。

delete和truncate的应用场景

1.delete适用于数据量较小,对于性能要求不是很高的情况下,可以采用delete加上where子句进行删除数据。

2.如果需要考虑事务提交,回滚操作的,适合适用delete进行删除数据。

3.当涉及到大量数据,而且是不需要回滚的情况下,并且要求速度快,效率高,则可以使用truncate来删除数据。

 

delete和truncate是用来删除表数据的(但是保留表结构),而drop是用来删除整个表的,包括表结构和表内容,在sql语言分类上它是属于DDL语言。

他们执行的速度快慢关系:drop>truncate>delete。

最后,在企业级项目开发中,对于数据并不是真正的从物理上进行删除,而是进行逻辑上的删除,此时会对删除数据进行一个删除标识的处理,也就是说只是把数据从页面上隐藏了,用户暂时看不见了而已,其实数据是还存在的。

转载于:https://www.cnblogs.com/jasonboren/p/10894579.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值