SQL中Truncate的用法

正文导读:删除表中的数据的艺术有delete,truncate, 在这之中TRUNCATE
TABLE用于删除表中的有着行,而不记录单个行删除操作。TRUNCATE TABLE 与未有WHERE 子句的 DELETE 语句看似;可是,TRUNCATE TABLE
速度更加快,使用的系统财富和业务日志财富越来越少。下边介绍SQL中Truncate的用法

数据库中drop、delete与truncate的分别

 

drop直接删掉表;
truncate删除表中数据,再插入时自增加id又从1开头;delete删除表中数据,能够加where字句。

当你不再须求该表时, 用 drop;当您仍要保留该表,但要删除全部记录时,
用 truncate;当您要刨除部分笔录时(always with a WHERE clause), 用
delete.

(1)
DELETE语句实施删除的历程是每一回从表中删除黄金年代行,并且还要将该行的删除操作作为专门的学问记录在日记中保存以便实行扩充回滚操作。TRUNCATE
TABLE
则一遍性地从表中删除全体的多寡并不把单独的去除操作记录记入日志保存,删除行是不能够死灰复然的。何况在剔除的长河中不会激活与表有关的删除触发器。施行进程快。

 

(2) 表和目录所占空间。当表被TRUNCATE
后,那一个表和索引所占领的半空中会回复到起来大小,而DELETE操作不会打折扣表或索引所占用的空间。drop语句将表所据有的上空全释放掉。

Truncate是三个能够高效清空资料表内全体材质的SQL语法。况且能针对具备活动依次增加值的字段,做计数重新初始化归零再次总计的法力。

(3) 日常而言,drop > truncate > delete

 

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

一、Truncate语法

(5) TRUNCATE 和DELETE只删除数据,而DROP则删除全部表(结构和数量)。

[ { database_name.[ schema_name ]. | schema_name . } ]
    table_name
[ ; ]
 

(6) truncate与不带where的delete
:只删除数据,而不删除表的协会(定义)drop语句将删除表的组织被信赖的牢笼(constrain),触发器(trigger)索引(index);重视于该表的积攒进程/函数将被保留,但其状态会化为:invalid。

参数

(7) delete语句为DML(data maintain Language),那么些操作会被平放 rollback
segment中,事务提交后才生效。假若有对应的 tigger,实行的时候将被触发。

database_name
数据库的名称。

(8) truncate、drop是DLL(data define
language),操作立时生效,原数据不松手 rollback segment中,无法回滚

schema_name
表所属框架结构的名号。

(9) 在未有备份意况下,严谨运用 drop 与
truncate。要删减部分数据行接纳delete且注意结合where来限定影响范围。回滚段要丰盛大。要删减表用drop;若想保留表而将表中数据删除,假设于业务无关,用truncate就可以兑现。假诺和事务有关,或教授想触发trigger,依旧用delete。

table_name
要截断的表的称号,或要刨除其任何行的表的称谓。

(10) Truncate table 表名 速度快,而且功能高,因为:
truncate table 在效果与利益上与不带 WHERE 子句的 DELETE
语句相符:二者均删除表中的成套行。但 TRUNCATE TABLE 比 DELETE
速度快,且使用的系统和事情日志财富少。DELETE
语句每一遍删除意气风发行,并在业务日志中为所删除的每行记录意气风发项。TRUNCATE TABLE
通过释放存款和储蓄表数据所用的数额页来删除数据,况且只在业务日志中记录页的自由。

 

(11) TRUNCATE TABLE
删除表中的持有行,但表结构及其列、限定、索引等保持不改变。新行标记所用的计数值重新载入参数为该列的种子。假设想保留标记计数值,请改用
DELETE。假若要去除表定义及其数量,请使用 DROP TABLE 语句。

二、Truncate使用注意事项

(12) 对于由 FOREIGN KEY 约束引用的表,不可能接纳 TRUNCATE
TABLE,而应运用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE
不记录在日记中,所以它不能够激活触发器。

 

 

1、TRUNCATE TABLE 在效果与利益上与不带 WHERE 子句的 DELETE
语句相符:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE
速度快,且使用的体系和事务日志能源少。

 

2、DELETE
语句每趟删除风姿罗曼蒂克行,并在作业日志中为所删除的每行记录大器晚成项。TRUNCATE TABLE
通过自由存储表数据所用的数额页来删除数据,并且只在作业日志中记录页的获释。

 

3、TRUNCATE TABLE
删除表中的具备行,但表结构及其列、约束、索引等维持不改变。新行标志所用的计数值重新设置为该列的种子。要是想保留标记计数值,请改用
DELETE。假使要刨除表定义及其数量,请使用 DROP TABLE 语句。

 

4、对于由 FOREIGN KEY 约束引用的表,不能够运用 TRUNCATE
TABLE,而应运用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE
不记录在日记中,所以它无法激活触发器。

 

5、TRUNCATE TABLE 不可能用于参加了索引视图的表。

 

6、对用TRUNCATE TABLE删除数据的表上扩展数据时,要使用UPDATE
STATISTICS来保险索引新闻。

 

7、假设有ROLLBACK语句,DELETE操作将被废除,但TRUNCATE不会收回。

 

 

 

三、不可能对以下表使用 TRUNCATE TABLE

 

1、由 FOREIGN KEY 约束引用的表。(您能够截断具备援引作者的外键的表。)

2、参与索引视图的表。

欧洲杯竞猜平台 ,3、通过使用职业复制或联合复制宣布的表。

4、对于有所以上叁个或五性情状的表,请使用 DELETE 语句。

5、TRUNCATE TABLE 无法激活触发器,因为该操作不记录种种行删除。

 

 

 

四、TRUNCATE、Drop、Delete区别

 

 
1.drop和delete只是删除表的数额(定义),drop语句将删除表的协会、被信赖的羁绊(constrain)、触发器
(trigger)、索引(index);正视于该表的积存进程/函数将保存,但是变为invalid状态。

2.delete语句是DML语言,这么些操作会放在rollback
segement中,事物提交后才生效;假设有照望的触发器(trigger),实践的时候将被触发。truncate、drop是DDL语言,操作后即
生效,原数据不会安置rollback中,无法回滚,操作不会触发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,再重复导入、插入数据。

6.delete是DML语句,不会自行提交。drop/truncate都以DDL语句,实践后会自动提交。

7、drop日常用来删除全部性数据
如表,格局,索引,视图,完整性约束等;delete用于删除局地性数据
如表中的某一元组

8、DROP把表结构都删了;DELETE只是把数据清掉

9、当你不再供给该表时, 用 drop;当您仍要保留该表,但要删除全数记录时,
用 truncate;当您要刨除部分笔录时(always with a WHERE clause), 用
delete.

相关文章