PostgreSQL学习笔记八:高级命令TRUNCATE TABLE
在 PostgreSQL 中,TRUNCATE TABLE
语句用于从表中删除所有行,但不删除表本身。这个操作比使用 DELETE
语句删除所有行更快,因为它不记录每行的删除,而是直接截断表并重置任何关联的计数器(如自增主键)。
基本语法
TRUNCATE TABLE table_name;
table_name
是你想要清空数据的表的名称。
选项
RESTART IDENTITY
:如果你的表有一个自增的主键,使用这个选项可以重置序列到它的最大值。CONTINUE IDENTITY
:这个选项允许序列保持当前的值,不会重置。
示例
- 清空表:
TRUNCATE TABLE customers;
这将从 customers
表中删除所有行。
- 清空表并重置自增主键:
TRUNCATE TABLE customers RESTART IDENTITY;
这将删除 customers
表中的所有行,并将自增主键重置为 1(或序列定义时指定的起始值)。
- 清空表但保留自增主键的当前值:
TRUNCATE TABLE customers CONTINUE IDENTITY;
这将删除 customers
表中的所有行,但不会重置自增主键的值。
注意事项
TRUNCATE TABLE
是不可逆的操作,一旦执行,表中的数据将被永久删除。TRUNCATE TABLE
无法在有外键约束引用的情况下使用。如果表被其他表的外键约束引用,你需要先删除或修改这些外键约束。TRUNCATE TABLE
会重置表的统计信息,这可能会影响到查询计划的选择。- 在事务中,
TRUNCATE TABLE
会立即释放磁盘空间,而DELETE
语句则可能需要更多的时间和磁盘空间来处理行的删除。
在执行 TRUNCATE TABLE
之前,确保你已经备份了需要的数据,或者确定不再需要表中的数据。