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。
最后,在企业级项目开发中,对于数据并不是真正的从物理上进行删除,而是进行逻辑上的删除,此时会对删除数据进行一个删除标识的处理,也就是说只是把数据从页面上隐藏了,用户暂时看不见了而已,其实数据是还存在的。
drop与truncate与delete的区别与联系的更多相关文章
- drop、truncate和delete的区别 [转载]
drop.truncate和delete的区别 本文转载自: https://www.cnblogs.com/zhizhao/p/7825469.html (1)DELETE语句执行删除的过程 ...
- mysql中 drop、truncate和delete的区别
mysql中drop.truncate和delete的区别 (1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作. TRUNC ...
- mysql之drop、truncate和delete的区别
今天在整理mysql数据库笔记的时候突然想到一个问题,就是drop.truncate和delete的区别,乍一看三者都是有删除的功能,但是具体来看还是有很多区别的.我先把这三个的作用简单说一下,有前辈 ...
- SQL删除语句DROP、TRUNCATE、 DELETE 的区别
主要介绍了SQL删除语句DROP.TRUNCATE. DELETE 的区别,帮助大家更好的理解和学习sql语句,感兴趣的朋友可以了解下 DROP: 1 DROP TABLE test; 删除表test ...
- 数据库:drop、truncate、delete的区别
近日在删除数据时,发现除了常用的Delete & Drop语句之外,还有Truncate也是与删除数据相关的,针对上述三种有进行简单的比较与整理 用法 drop 用法:drop table 表 ...
- 浅谈 drop、truncate和delete的区别
(1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作. TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独 ...
- SQL 删除的三个语句:DROP、TRUNCATE、 DELETE 的区别
转载:http://www.runoob.com/sql/sql-delete.html DROP: DROP test; 删除表test,并释放空间,将test删除的一干二净. TRUNCATE: ...
- 【转】drop、truncate和delete的区别
(1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行回滚操作. TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删 ...
- [转载]drop、truncate和delete的区别
原文出处:http://blog.csdn.net/ws0513/article/details/49980547 (1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作 ...
- SQL关于删除的三个语句:DROP、TRUNCATE、 DELETE 的区别。
DROP: DROP TABLE test; 删除表test,并释放空间,将test删除的一干二净. TRUNCATE: TRUNCATE test; 删除表test里的内容,并释放空间,但不删除表的 ...
随机推荐
- ZooKeePer总汇
一.什么Zookeeper Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization) ...
- springboot+mybatis 使用事务
一.一些概念 声明式的事务管理是基于AOP的,在springboot中可以通过@Transactional注解的方式获得支持,这种方式的优点是: 1)非侵入式,业务逻辑不受事务管理代码的污染. 2)方 ...
- 20175212童皓桢 《Java程序设计》第十周学习总结
学号 2016-2017-2 <Java程序设计>第X周学习总结 教材学习内容总结 一.Java中的线程的状态 建的线程在它的一个完整的生命周期中通常要经历如下的四种状态: 1.新建: 当 ...
- linux ./configure 的参数详解
转载自http://blog.csdn.net/zjt289198457/article/details/6918656 linux ./configure 的参数详解 ./configure 该 ...
- Uploading multiple files asynchronously by blueimp jquery-fileupload
Uploading multiple files asynchronously by blueimp jquery-fileupload Solved. Fiddle: http://jsfidd ...
- typescript 函数(定义、参数、重载)
代码: // 本节内容 // 1.函数的定义 // 2.参数(可选参数/默认参数/剩余参数) // 3.方法的重载 // js // function add(x,y){ // return x+y ...
- 使用Jmeter性能测试注意点
一.性能测试注意点 1. 用jmeter测试时使用BeanShell脚本获取随机参数值,会导致请求时间过长,TPS过低.应改为使用csv读取参数值,记录的TPS会更加准确. 注:进行性能测试时,应注意 ...
- 对“XXX::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们
托管调试助手“CallbackOnCollectedDelegate”在“D:\XXX\XXX.vshost.exe”中检测到问题. 其他信息: 对“XXX+HookProc::Invoke”类型的已 ...
- leetcode 454 四数相加
采用一个哈希表存储两个数的和,再遍历另外两个数组的和,time O(n2) space O(n2) class Solution { public: int fourSumCount(vector&l ...
- Android EditText弹出软键盘实现页面标题头不动,软键盘弹出在编辑框下面
为了实现EditText编辑的时候弹出软键盘标题头不动,底部编辑框,上移在这总结: RelativeLayout在弹出软键盘的时候先寻找android:layout_alignParentBottom ...