VastbaseE100

基于开源技术的HTAP数据库管理系统。性能优异,稳定可靠,提供诸多专属领域特性。

Menu

TRUNCATE

TRUNCATE - 清空一个表或一组表

语法格式

TRUNCATE [ TABLE ] [ ONLY ] name [ * ] [, ... ]
    [ RESTART IDENTITY | CONTINUE IDENTITY ] [ CASCADE | RESTRICT ]

说明

TRUNCATE快速删除一组表中的所有行。它与每个表上的非限定_1079634具有相同的效果,但由于它实际上不扫描表,因此它更快。此外,它立即回收磁盘空间,而不是需要后续的VACUUM 操作。这对大型表最有用。

参数说明

  • name

    要截断的表的名称(可选择模式限定)。如果在表名之前指定了 ONLY,则仅截断该表。如果未指定 ONLY ,则会截断该表及其所有后代表(如果有)。(可选)可以在表名后指定 * 以明确指示包含后代表。

  • RESTART IDENTITY

    自动重启截断表的列所拥有的序列。

  • CONTINUE IDENTITY

    不要更改序列的值。这是默认值。

  • CASCADE

    自动截断所有对任何命名表具有外键引用的表,或者由于 CASCADE而截断到添加到组的任何表。

  • RESTRICT

    如果任何表具有未在命令中列出的表的外键引用,则拒绝截断。这是默认值。

注意事项

您必须具有表的 TRUNCATE 权限才能截断它。

TRUNCATE 在其操作的每个表上获取 ACCESS EXCLUSIVE锁,这会阻止表上的所有其他并发操作。指定 RESTART IDENTITY时,任何要重新启动的序列同样都是独占锁定的。如果需要对表进行并发访问,则应使用DELETE 命令。

TRUNCATE不能在具有其他表的外键引用的表上使用,除非所有这些表也在同一命令中被截断。在这种情况下检查有效性将需要表扫描,而整点不是一个。CASCADE 选项可用于自动包含所有相关表 -但在使用此选项时要非常小心,否则您可能会丢失您不想要的数据!

TRUNCATE 不会触发表可能存在的任何 ON DELETE 触发器。但它会触发 ON TRUNCATE 触发器。如果为任何表定义了 ON TRUNCATE触发器,则在发生任何截断之前触发所有 BEFORE TRUNCATE触发器,并且在执行最后一次截断并重置任何序列之后触发所有 AFTER TRUNCATE触发器。触发器将按照要处理的表的顺序触发(首先是命令中列出的那些,然后是由于级联而添加的任何表)。

TRUNCATE不是MVCC安全的。截断后,如果表使用在截断发生之前拍摄的快照,则表对于并发事务将显示为空。

TRUNCATE对于表中的数据是事务安全的:如果周围的事务没有提交,则截断将安全地回滚。

指定 RESTART IDENTITY 时,隐含的 ALTER SEQUENCE RESTART操作也以事务方式完成;也就是说,如果周围的事务没有提交,它们将被回滚。这与ALTER SEQUENCE RESTART的正常行为不同。请注意,如果在事务回滚之前对重新启动的序列执行任何其他序列操作,则将回滚这些操作对序列的影响,但不会影响它们对currval() 的影响。也就是说,事务 currval()将继续反映失败事务中获得的最后一个序列值,即使序列本身可能不再与之一致。这类似于事务失败后currval() 的常规行为。

外部表当前不支持 TRUNCATE。这意味着如果指定的表具有任何外来的后代表,则该命令将失败。

示例

截断表 bigtable 和 fattable :

TRUNCATE bigtable, fattable;

相同,并重置任何相关的序列生成器:

TRUNCATE bigtable, fattable RESTART IDENTITY;

截断表 othertable ,并通过外键约束级联到任何引用 othertable 的表:

TRUNCATE othertable CASCADE;

兼容性

SQL:2008标准包含 TRUNCATE 命令,语法为 TRUNCATE TABLE tablename 。条款CONTINUE IDENTITY / RESTART IDENTITY 也出现在该标准中,但具有略微不同但相关的含义。剩下这个命令的一些并发行为由标准定义的实现,因此应考虑上述注释,并在必要时与其他实现进行比较。