华为云云数据库GaussDBTRUNCATE_云淘科技

功能描述

清理表数据,TRUNCATE快速地从表中删除所有行。

它和在目标表上进行无条件的DELETE有同样的效果,但由于TRUNCATE不做表扫描,因而快得多。在大表上操作效果更明显。

注意事项

TRUNCATE TABLE在功能上与不带WHERE子句DELETE语句相同:二者均删除表中的全部行。
TRUNCATE TABLE比DELETE速度快且使用系统和事务日志资源少:

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

TRUNCATE,DELETE,DROP三者的差异如下:

TRUNCATE TABLE,删除内容,释放空间,但不删除定义。
DELETE TABLE,删除内容,不删除定义,不释放空间。
DROP TABLE,删除内容和定义,释放空间。

语法格式

清理表数据。

1
2
TRUNCATE [ TABLE ] [ ONLY ] {table_name [ * ]} [, ... ]
    [ CONTINUE IDENTITY ] [ CASCADE | RESTRICT ] [ PURGE ];

清理表分区的数据。

1
2
3
4
5
ALTER TABLE [ IF EXISTS  ] { [ ONLY  ] table_name  
                           | table_name *  
                           | ONLY ( table_name )  } 
    TRUNCATE PARTITION { partition_name  
                       | FOR (  partition_value  [, ...] )  } [ UPDATE GLOBAL INDEX ];

参数说明

ONLY

如果声明ONLY,只有指定的表会被清空。如果没有声明ONLY,这个表以及其所有子表(若有)会被清空。

table_name

目标表的名称(可以有模式修饰)。

取值范围:已存在的表名。

CONTINUE IDENTITY

不改变序列的值。这是缺省值。

CASCADE | RESTRICT

CASCADE:级联清空所有由于CASCADE而被添加到组中的表。
RESTRICT(缺省值):如果其他表在该表上有外键引用则拒绝清空(分布式场景暂不支持)。

PURGE

默认将表数据放入回收站中,PURGE直接清理。

partition_name

目标分区表的分区名。

取值范围:已存在的分区名。

partition_value

指定的分区键值。

通过PARTITION FOR子句指定的这一组值,可以唯一确定一个分区。

取值范围:需要进行删除数据分区的分区键的取值范围。

使用PARTITION FOR子句时,partition_value所在的整个分区会被清空。

UPDATE GLOBAL INDEX

如果使用该参数,则会更新分区表上的所有全局索引,以确保使用全局索引可以查询出正确的数据。

如果不使用该参数,则分区表上的所有全局索引将会失效。

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
--创建SCHEMA。
gaussdb=# CREATE SCHEMA tpcds;

--创建表tpcds.reason。
gaussdb=# CREATE TABLE tpcds.reason(
  r_reason_sk      integer,
  r_reason_id      character(16),
  r_reason_desc    character(100)
);

--向表中插入多条记录。
gaussdb=# INSERT INTO tpcds.reason values(1,'AAAAAAAABAAAAAAA','reason 1'),(5,'AAAAAAAABAAAAAAA','reason 2'),(15,'AAAAAAAABAAAAAAA','reason 3'),(25,'AAAAAAAABAAAAAAA','reason 4'),(35,'AAAAAAAABAAAAAAA','reason 5'),(45,'AAAAAAAACAAAAAAA','reason 6'),(55,'AAAAAAAACAAAAAAA','reason 7');

--创建表。
gaussdb=# CREATE TABLE tpcds.reason_t1 AS TABLE tpcds.reason;

--清空表tpcds.reason_t1。
gaussdb=# TRUNCATE TABLE tpcds.reason_t1;

--删除表。
gaussdb=# DROP TABLE tpcds.reason_t1;
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
--创建分区表。
gaussdb=# CREATE TABLE tpcds.reason_p
(
  r_reason_sk integer,
  r_reason_id character(16),
  r_reason_desc character(100)
)PARTITION BY RANGE (r_reason_sk)
(
  partition p_05_before values less than (05),
  partition p_15 values less than (15),
  partition p_25 values less than (25),
  partition p_35 values less than (35),
  partition p_45_after values less than (MAXVALUE)
);

--插入数据。
gaussdb=# INSERT INTO tpcds.reason_p SELECT * FROM tpcds.reason;

--清空分区p_05_before。
gaussdb=# ALTER TABLE tpcds.reason_p TRUNCATE PARTITION p_05_before;

--清空分区p_15。
gaussdb=# ALTER TABLE tpcds.reason_p TRUNCATE PARTITION for (13);

--清空分区表。
gaussdb=# TRUNCATE TABLE tpcds.reason_p;

--删除表tpcds.reason_p。
gaussdb=# DROP TABLE tpcds.reason_p;

--删除表tpcds.reason。
gaussdb=# DROP TABLE tpcds.reason;

--删除SCHEMA。
gaussdb=# DROP SCHEMA tpcds CASCADE;

父主题: SQL语法

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家