TRUNCATE
功能描述
清理表数据,TRUNCATE快速地从表中删除所有行。
它和在目标表上进行无条件的DELETE有同样的效果,但由于TRUNCATE不做表扫描,因而快得多。在大表上操作效果更明显。
注意事项
请谨慎执行TRUNCATE TABLE,确认表数据可以删除后,再执行删除操作。TRUNCATE TABLE命令删除表数据后,数据将无法恢复。
- 避免在业务高峰期执行ALTER TABLE/ALTER TABLE PARTITION(增删改查、DROP PARTITION)、TRUNCATE操作,避免有长SQL阻塞AlTER、TRUNCATE操作或SQL业务被ALTER、TRUNCATE阻塞。
- 更多开发设计规范参见总体开发设计规范。
TRUNCATE TABLE说明
- TRUNCATE TABLE在功能上与不带WHERE子句DELETE语句相同:二者均删除表中的全部行。
- TRUNCATE TABLE比DELETE速度快且使用系统和事务日志资源少:
- DELETE语句每次删除一行,并在事务日志中为所删除每行记录一项。
- TRUNCATE TABLE通过释放存储表数据所用数据页来删除数据,并且只在事务日志中记录页的释放。
- TRUNCATE,DELETE,DROP三者的差异如下:
- TRUNCATE TABLE,删除内容,释放空间,但不删除定义。
- DELETE TABLE,删除内容,不删除定义,不释放空间。
- DROP TABLE,删除内容和定义,释放空间。
语法格式
清理表数据。
1 2 |
TRUNCATE [ TABLE ] [ ONLY ] {[[database_name.]schema_name.]table_name [ * ]} [, ... ] [ CONTINUE IDENTITY ] [ CASCADE | RESTRICT ]; |
参数说明
- ONLY
如果声明ONLY,只有指定的表会被清空。如果没有声明ONLY,这个表以及其所有子表(若有)会被清空。
- database_name
目标表的数据库名称。
- schema_name
目标表的模式名称。
- table_name
目标表的名字(可以有模式修饰)。
取值范围:已存在的表名。
- CONTINUE IDENTITY
不改变序列的值。这是缺省值。
- CASCADE | RESTRICT
- CASCADE:级联清空所有在该表上有外键引用的表,或者由于CASCADE而被添加到组中的表。
- RESTRICT(缺省值):如果其他表在该表上有外键引用则拒绝清空。
示例
清空分区表:
1
|
TRUNCATE TABLE tpcds.customer_address; |