truncate与delete的区别

转载 2015年11月21日 15:05:56


truncate table命令将快速删除数据表中的所有记录,但保留数据表结构。这种快速删除与delete from 数据表的删除全部数据表记录不一样,delete命令删除的数据将存储在系统回滚段中,需要的时候,数据可以回滚恢复,而truncate命令删除的数据是不可以恢复的 

可以做一个测试 

建一个带有自增字段的表,加入100万数据 
然后分别用TRUNCATE和DELETE删除全部数据 
然后再向表里插入一条数据 

最直观是: 
1.TRUNCATE TABLE是非常快的 
2.TRUNCATE之后的自增字段从头开始计数了,而DELETE的仍保留原来的最大数值 

………………………………………………………………………………………………
注意:这里说的delete是指不带where子句的delete语句 
相同点 
truncate和不带where子句的delete, 以及drop都会删除表内的数据 

不同点: 
1. truncate和 delete只删除数据不删除表的结构(定义) 
    drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态. 
2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发. 
   truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger. 
3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动 
  显然drop语句将表所占用的空间全部释放 
  truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage;   truncate会将高水线复位(回到最开始). 
4.速度,一般来说: drop>; truncate >; delete 
5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及 
使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大. 
想删除表,当然用drop 
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete. 
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据 

语句实例: 
truncate table wap_cms_cp_user 

原文:http://blog.163.com/jun_ai_ni_1314/blog/static/1378480552010426112233123/

数据库中truncate与delete的区别

而DELETE和TRUNCATE TABLE都是删除表中的数据的语句,它们的不同之处在于: 1、TRUNCATE TABLE比DELETE的速度快; 2、TRUNCATE TABLE 是删除表...
  • u011707402
  • u011707402
  • 2016年08月06日 11:23
  • 1307

truncate与delete的区别?(deletefrom table和truncate table tablea的区别!)

truncate是DDL語言.delete是DML語言 DDL語言是自動提交的.命令完成就不可回滾.truncate的速度也比delete要快得多. 详细说明: 相同点:truncate和不带wh...
  • a382064640
  • a382064640
  • 2014年03月14日 22:46
  • 4017

DROP TABLE、TRUNCATE TABLE和DELETE的区别

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

Delete与truncate的区别

Delete table_name 删除"表格记录"会把操作记录在日志中,可以通过事务回滚来恢复删除的数据。         truncate table table_name删除"表格记录"不可恢复...
  • xunzaosiyecao
  • xunzaosiyecao
  • 2014年03月19日 19:03
  • 1478

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

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

Truncate table,Delete From table,与Drop table的区别

1  delete table和delete from table的异同    delete table 与delete from table此两条语句没有实质的区别,都是删除表中的记录。  ...
  • lvxiaoting
  • lvxiaoting
  • 2015年12月18日 17:03
  • 1996

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

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

Oracle 中truncate与delete的区别

truncate是oracle中独有的关键字吧!它的作用是清空一个表格,在删除数据方面,其与delete有一些区别,以便自己记住: 1、在功能上,truncate是清空一个表的内容,它相当于delet...
  • wyzxg
  • wyzxg
  • 2007年05月30日 10:49
  • 4972

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

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

SQL 中 Delete、Truncate、Drop区别

删除表记录,快速删除表记录,删除表这些语句相信大家都会,下面整理一下Truncate、delete、drop用法区别:相同点 truncate和不带where子句的delete, 以及drop都会删除...
  • dz45693
  • dz45693
  • 2010年01月19日 16:30
  • 2454
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:truncate与delete的区别
举报原因:
原因补充:

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