truncate和delete,drop的区别

xiaoxiao2026-06-09  9

 

 

    delete: delete from 表

    drop: drop table 表  删除整个表结构包括数据 无法恢复

    truncate:truncate table 表

-----------------------------------------------------------------------------------

1:TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。

2: TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。

3:DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

4:TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。举例:

       使用identity。truncate  table  表。之后。再插入的话,标识列的计数值又重1开始。

 

create table tcc( id int identity primary key, name varchar ) insert into tcc values('a'); insert into tcc values('b'); select *from tcc;

 

id

name

1

a

2

b

 

使用delete删除

delete from tcc; insert into tcc values('a'); insert into tcc values('b'); select *from tcc;

 

 

结果:identity是从3开始

id

name

3

a

4

b

使用 truncate

 

 

id

name

1

a

2

b

 

5:对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。

注意:对于复制表,只能复制表结构或数据,外键约束不能复制,所以可以用truncate 删除,

举例: 熟悉的emp dept表

    就可以truncate  table dept1;但是不能truncate  PL/SQL工具自带的dept表,

 

 

6:由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。 Oracle中不用committ,delete需要,所以truncate后不能恢复数据

TRUNCATE TABLE 不能用于参与了索引视图的表。

 

7drop  table  表  。删除表全部 ,包括结构数据。

 

create table dept1 as select *from dept where 1=1; create table emp1 as select *from emp where 1=1;

 

truncate table tcc; insert into tcc values('a'); insert into tcc values('b'); select *from tcc;

 

 

相关资源:Java 面经手册·小傅哥(公众号:bugstack虫洞栈).pdf
转载请注明原文地址: https://www.6miu.com/read-5049852.html

最新回复(0)