提要: 在本教程中,你将学习到如何使用 PostgreSQL 的 TRUNCATE TABLE 语句来快速的清空表里的数据。

使用 DELETE 语句可以删除数据表里的所有数据。然而,对于包含大量数据的表来说,使用 TRUNCATE TABLE 将更高效。

TRUNCATE TABLE 语句在不扫描表的情况下,删除表里的所有数据。这就是它比 DELETE 快的原因。另外,它立即回收存储空间,所以不必执行随后的 VACUUM 操作,这在数据量大的表里是非常有用的。

清空所有数据

TRUNCATE TABLE 最简单的用法如下:

TRUNCATE TABLE table_name;

比如,要清空 sjk66 表的所有数据,可以这样写:

TRUNCATE TABLE sjk66;

还可以在清空数据的同时,重置所关联的序列计数:

TRUNCATE TABLE table_name RESET IDENTITY;

清空多表的数据

TRUNCATE TABLE 后面指定多个表名,即可清空多张表。表名之间使用逗号分隔:

TRUNCATE TABLE table_name1, table_name2, 

比如,清空 invoicecustomer 表:

TRUNCATE TABLE invoice, customer;

清空被外键引用的表

有时候,要清空的表可能被其它表通过外键引用,这时,那些被外键引用的记录将不会清空。

通过添加 CASCADE,可以将主表中的记录及外键引用的其它表的相关数据一起清空:

TRUNCATE TABLE table_name CASCADE;

TRUNCATE TABLE 和 ON DELETE 触发器

TRUNCATE TABLE 清空数据时,不会触发任何 ON DELETE触发器。如果要触发,需要定义数据表的 BEFORE TRUNCATE 和/或 AFTER TRUNCATE 触发器。

TRUNCATE TABLE 和事务

TRUNCATE TABLE 是事务安全的。意思是,如果将它放在诸如 BEGIN ... ROLLBACK 的事务语句里,清空操作可以安全的回滚。

上一篇:PostgreSQL 删除表