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里的内容,并释放空间,但不删除表的 ...
随机推荐
- python中super().__init__和类名.__init__的区别
super().__init__相对于类名.__init__,在单继承上用法基本无差 但在多继承上有区别,super方法能保证每个父类的方法只会执行一次,而使用类名的方法会导致方法被执行多次 多继承时 ...
- 添加一个静态JAVA库
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) # Build all java files in the java subdirectory L ...
- IntelliJ IDEA 常用快捷键整理
1. -----------自动代码-------- 常用的有fori/sout/psvm+Tab即可生成循环.System.out.main方法等boilerplate样板代码 例如要输入for( ...
- 笔记本电脑如何同时上内外网(通过usb外接网卡实现虚拟机连外网)
我们这里达成的方式不是内外网切换,而是真正意义上的同时上内网和外网 原理: 通过构建虚拟机,利用usb外接网卡(某宝某东都有售,价格在50大洋左右)使虚机连接外网,然后开启虚拟机的unity模式 准备 ...
- python3笔记十四:python可变与不可变数据类型+深浅拷贝
一:学习内容 python3中六种数据类型 python赋值 python浅拷贝 python深拷贝 二:python3六种数据类型 1.六种数据类型 Number(数字) string(字符串) L ...
- 二、Smarty中的三种主要变量
1.从PHP中分配的变量 $smarty -> assign(); 从PHP分配给模板使用的变量:动态变量 2.从配置文件中读取的变量 $smarty配置文件中的内容不是PHP读取,而是就在sm ...
- out 传值(传址)
传值,只将这个变量的值给拿走,不返还,除非return赋值.将a的值传入函数,无论这个值在函数中如何变化,不会影响main中的a 传址,将这个变量的值拿走运算,完成后还是得返还回来(不用return, ...
- 下载excle文件之工具
创建万能的工具类,已备用 ExcelData.java 存放文件数据 package com.ulic.gis.dataCenter.util; import java.io.Serializable ...
- c++ 引用& 与 取地址&
https://www.csdn.net/gather_2e/NtjaYgzsNTctYmxvZwO0O0OO0O0O.html 还有指针和取值: int& a = b; int *c = & ...
- leetcode 115不同的子序列
滚动数组: /***** 下标从1开始 dp[i][j]:= numbers of subseq of S[1:j] equals T[1:i] if(s[j]==t[i]):(那么之后的子串可以是是 ...