YMatrix 文档
关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
- MPP 架构
- 镜像分布策略
- 持续聚集
- 滑动窗口
- Grafana 监控指标解读
- Prometheus 监控指标解读
- 术语表
-
工具指南
- mxaddmirrors
- mxbackup
- mxbench
- mxdeletesystem
- mxgate
- mxinitstandby
- mxmoveseg
- mxpacklogs
- mxrecover
- mxrestore
- mxshift
- mxstart
- mxstate
- mxstop
- gpconfig
- pgvector
-
数据类型
-
存储引擎
-
执行引擎
-
系统配置参数
SQL 参考
- ABORT
- ALTER_DATABASE
- ALTER_EXTENSION
- ALTER_EXTERNAL_TABLE
- ALTER_FOREIGN_DATA_WRAPPER
- ALTER_FOREIGN_TABLE
- ALTER_FUNCTION
- ALTER_INDEX
- ALTER_RESOURCE_GROUP
- ALTER_RESOURCE_QUEUE
- ALTER_ROLE
- ALTER_RULE
- ALTER_SCHEMA
- ALTER_SEQUENCE
- ALTER_SERVER
- ALTER_TABLE
- ALTER_TABLESPACE
- ALTER_TYPE
- ALTER_USER_MAPPING
- ALTER_VIEW
- ANALYZE
- BEGIN
- CHECKPOINT
- COMMIT
- COPY
- CREATE_DATABASE
- CREATE_EXTENSION
- CREATE_EXTERNAL_TABLE
- CREATE_FOREIGN_DATA_WRAPPER
- CREATE_FOREIGN_TABLE
- CREATE_FUNCTION
- CREATE_INDEX
- CREATE_RESOURCE_GROUP
- CREATE_RESOURCE_QUEUE
- CREATE_ROLE
- CREATE_RULE
- CREATE_SCHEMA
- CREATE_SEGMENT_SET
- CREATE_SEQUENCE
- CREATE_SERVER
- CREATE_TABLE
- CREATE_TABLE_AS
- CREATE_TABLESPACE
- CREATE_TYPE
- CREATE_USER_MAPPING
- CREATE_VIEW
- DELETE
- DROP_DATABASE
- DROP_EXTENSION
- DROP_EXTERNAL_TABLE
- DROP_FOREIGN_DATA_WRAPPER
- DROP_FOREIGN_TABLE
- DROP_FUNCTION
- DROP_INDEX
- DROP_RESOURCE_GROUP
- DROP_RESOURCE_QUEUE
- DROP_ROLE
- DROP_RULE
- DROP_SCHEMA
- DROP_SEGMENT_SET
- DROP_SEQUENCE
- DROP_SERVER
- DROP_TABLE
- DROP_TABLESPACE
- DROP_TYPE
- DROP_USER_MAPPING
- DROP_VIEW
- END
- EXPLAIN
- GRANT
- INSERT
- LOAD
- LOCK
- REINDEX
- RELEASE_SAVEPOINT
- RESET
- REVOKE
- ROLLBACK_TO_SAVEPOINT
- ROLLBACK
- SAVEPOINT
- SELECT INTO
- SET ROLE
- SET TRANSACTION
- SET
- SHOW
- START TRANSACTION
- TRUNCATE
- UPDATE
- VACUUM
常见问题(FAQ)
TRUNCATE
清空表的所有行。
概要
TRUNCATE [TABLE] [ONLY] name [ * ] [, ...]
[ RESTART IDENTITY | CONTINUE IDENTITY ] [CASCADE | RESTRICT]
描述
TRUNCATE快速删除一个表或一组表中的所有行。 它与在每个表上进行不限定DELETE的效果相同, 但是由于它实际上并不扫描表,因此速度更快。 这在大型表上最有用。
您必须在表上具有TRUNCATE特权才能清空表行。
TRUNCATE在对其操作的表上获取访问排他锁,这将阻止该表上的所有其他并发操作。 如果指定了RESTART IDENTITY,则将要重新计数的所有序列都将被排他地锁定。 如果需要并发访问表,则应改用DELETE命令。
参数
name
- 要清空的表的名称(可以用schema修饰)。 如果在表名之前指定了ONLY,则仅该表被清空。 如果未指定ONLY,则该表及其所有子表(如果有)将被清空。 (可选)可以在表名称后指定*,以显式指示包括子表。
CASCADE
- 因为此关键字适用于外键引用(YMatrix 数据库中不支持),所以它无效。
RESTART IDENTITY
- 自动重新启动被清空表的列所拥有的序列。
CONTINUE IDENTITY
- 不要更改序列的值。这是默认值。
RESTRICT
- 因为此关键字适用于外键引用(YMatrix 数据库中不支持),所以它无效。
注解
TRUNCATE将不会运行表可能存在的任何用户定义的ON DELETE触发器。
TRUNCATE不会清空从指定表继承的任何表。 仅指定的表被清空,而不是其子表。
TRUNCATE不会清空分区表的任何子表。 如果指定分区表的子表,则TRUNCATE不会从该表及其子表中删除行。
TRUNCATE不是MVCC安全的。 清空后,如果并发事务使用清空发生之前获取的快照,则该表将对并发事务显示为空。
对于表中的数据,TRUNCATE是事务安全的:如果所属的事务未提交,则清空将被安全地回滚。
TRUNCATE在其操作的每个表上获取ACCESS EXCLUSIVE锁,该锁将阻止该表上的所有其他并发操作。 如果需要并发访问表,则应改用DELETE命令。
当指定了RESTART IDENTITY时,隐式的ALTER SEQUENCE RESTART操作也将以事务方式完成; 也就是说,如果所在的事务没有提交,它们将被回滚。 这不同于ALTER SEQUENCE RESTART的正常行为。 请注意,如果在事务回滚之前对重新启动的序列执行了任何其他序列操作,则这些操作对序列的影响将被回滚,但不会对currval()产生影响。 也就是说,在事务currval()之后,它将继续反映在失败的事务中获得的最后一个序列值,即使序列本身可能不再与此一致。 这类似于事务失败后currval()的通常行为。
示例
清空表films和distributors:
TRUNCATE films, distributors;
相同,并重置所有关联的序列生成器:
TRUNCATE films, distributors RESTART IDENTITY;
兼容性
SQL:2008标准包括带有语法TRUNCATE TABLE tablename的TRUNCATE命令。 子句CONTINUE IDENTITY/RESTART IDENTITY也出现在该标准中,但是尽管具有相关的含义,但略有不同。 该命令的一些并发行为由标准实现定义,因此应考虑上述注意事项,并在必要时与其他实现进行比较。