数据库中truncate与delete的区别与联系

昨天被问到truncate与delete的区别,truncate没用过,回去百度了一下,才知道还有这个一种语句。

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

1、建一个带有自增字段的表,加入100万数据

2、分别用TRUNCATE和DELETE删除全部数据(分别执行DELETE FROM `TABLENAME`; TRUNCATE FROM `TABLENAME`;DROP FROM `TABLENAME`;)

3、然后再向表里插入一条数据

最直观是:

1、TRUNCATE TABLE是非常快的

2、TRUNCATE之后的自增字段从头开始计数了,而DELETE的仍保留原来的最大数值

相同点:

  truncate和不带where子句的delete, 以及drop都会删除表内的数据。

不同点:

1、truncate和delete只删除数据不删除表的结构,而drop语句不仅删除全部数据还删除了表的结构; 

2、delete操作会放到rollback segement中,事务提交之后才生效也就是可以回滚。而truncate,drop操作之后原数据不放到rollback segment中,不能回滚

3、delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动,也就是自增ID不变化

4、速度,一般来说: drop>; truncate >; delete

原文地址:https://www.cnblogs.com/liqiu/p/3633214.html