drop、delete与truncate的区别

原创 2018年04月17日 13:46:12
drop、delete与truncate的区别
drop直接删掉表;truncate删除表中数据,再插入时自增长id又从1开始;delete删除表中数据,可以加where字句。

(1) DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。

(2) 表和索引所占空间。当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小,而DELETE操作不会减少表或索引所占用的空间。drop语句将表所占用的空间全释放掉。

(3) 一般而言,drop > truncate > delete。

(4) 应用范围。TRUNCATE 只能对TABLE;DELETE可以是table和view。

(5) TRUNCATE 和DELETE只删除数据,而DROP则删除整个表(结构和数据)。

(6) truncate与不带where的delete:只删除数据,而不删除表的结构(定义)drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。

(7) delete语句为DML(data maintain Language),这个操作会被放到 rollback segment中,事务提交后才生效。如果有相应的 tigger,执行的时候将被触发。

(8) truncate、drop是DLL(data define language),操作立即生效,原数据不放到 rollback segment中,不能回滚。

(9) 在没有备份情况下,谨慎使用 drop 与 truncate。要删除部分数据行采用delete且注意结合where来约束影响范围。回滚段要足够大。要删除表用drop;若想保留表而将表中数据删除,如果于事务无关,用truncate即可实现。如果和事务有关,或是想触发trigger,还是用delete。

(10) Truncate table 表名 速度快,而且效率高,因为:truncate table 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

(11) TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。

(12) 对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Yaroo/article/details/79973631

Create Your Own Visual Basic Add-Ins

Create Your Own Visual Basic Add-InsBy S.S. AhmedRating: 3.7 out of 5Rate this article docume...
  • sonicdater
  • sonicdater
  • 2002-03-09 18:00:00
  • 932

DROP TABLE、TRUNCATE TABLE和DELETE的区别

声明:本篇文章来自百度知道答案整理,附上链接 http://zhidao.baidu.com/link?url=zPEGUyOzPprMej31Yc50dXKzYEkBHijignfVk8sdUUPN...
  • u013815649
  • u013815649
  • 2015-12-23 10:13:58
  • 6171

Truncate Delete Drop命令的区别 .

truncate和不带where子句的delete, 以及drop都会删除表内的数据
  • wx3957156
  • wx3957156
  • 2014-10-15 18:20:18
  • 1560

了解mysql中drop,truncate、delete的区别

注意:这里的delete是指不带where子句的delete语句 一、相同点: truncate和不带where子句的delete, 以及drop都会删除表内的数据。 二、不同点: 1、...
  • vip_linux
  • vip_linux
  • 2013-02-21 08:51:29
  • 1059

MySQL delete/truncate/drop的差别分析

用户想要删除数据表可以使用delete、truncate以及drop来删除数据。从功能上讲不带where子句的delete、truncate和drop是相似的。三者之间的不同之处主要包括以下几点:1、...
  • wanglei_storage
  • wanglei_storage
  • 2016-06-28 16:25:56
  • 546

sql中delete,drop ,truncate三者的区别

sql中delete,drop ,truncate都代表删除,但3者又有一些区别       1. truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被依...
  • xiaolingzinia
  • xiaolingzinia
  • 2014-03-13 19:22:15
  • 2349

mysql delete,truncate与drop的区别

delete是dml语句,可以使用触发器,外键以及事务,可以通过日志恢复,只删除表数据 truncate是ddl语句 drop是ddl语句...
  • razorluo
  • razorluo
  • 2014-12-30 11:20:31
  • 1002

Mysql中 delect 、truncate、drop 的区别

学习Mysql的时候,我们会学习到表中记录的删除、表的删除、 数据库的删除等操作,那么那些删除语句中有什么不同呢? delect   from   table_name; truncate tab...
  • WCCchangchun
  • WCCchangchun
  • 2016-04-22 11:22:30
  • 1061

数据库中删除语句Drop、Delete、Truncate的相同点和不同点的比较(举例说明)

转载来自: 数据库中删除语句Drop、Delete、Truncate的相同点和不同点的比较(举例说明)   数据库删除语句的分别介绍: Delete:用于删除表中的行(注:可以...
  • shehun11
  • shehun11
  • 2014-10-24 11:20:37
  • 1372

详解Truncate delete drop三者的区别

  • 2013年03月29日 10:10
  • 4KB
  • 下载
收藏助手
不良信息举报
您举报文章:drop、delete与truncate的区别
举报原因:
原因补充:

(最多只允许输入30个字)