PostgreSQL TRUNCATE表

在本节中,我们将了解PostgreSQL TRUNCATE TABLE命令的工作原理,以快速删除大表中的所有记录。

要从表中删除所有数据,我们使用DELETE 命令。当一个表包含很多记录并且也没有用时,在这种情况下,我们将使用TRUNCATE TABLE命令从特定表中删除所有记录。

TRUNCATE 命令的语法

TRUNCATE TABLE 命令的基本语法如下:

TRUNCATE TABLE table_name;  
[ RESTART IDENTITY | CONTINUE IDENTITY ] [ CASCADE | RESTRICT ]  

在上面的语法中,我们有以下参数:

范围 描述
CASCADE 此选项会自动截断所有表,其中包含对其他表的外键引用,或由于 CASCADE 添加到集合中的任何表。
RESTART IDENTITY 它反复重新启动截断表的列所拥有的订单。
CONTINUE IDENTITY 它不会更改订单的值,并且是默认选项。
RESTRICT 它也是一个默认选项,如果其他表包含表的外键引用(命令中未提及),它可以拒绝截断。

注意:TRUNCATE TABLE 命令从表中删除所有记录而不检查它,它比 DELETE 命令更快。 

PostgreSQL中,我们可以通过两种方式执行截断表:

  • PostgreSQL 使用 pgAdmin 截断表
  • PostgreSQL 使用 SQL Shell 截断表 (PSQL)

PostgreSQL 使用 pgAdmin 截断表

要在pgAdmin中使用truncate table 命令删除表,我们将按照以下步骤操作:

第1步:

打开您的pgAdmin,然后转到我们将转到数据库的对象树,移至schemas下的公共部分,然后选择我们要截断的特定表(student_info)。

数据库→ javatpoint→Schema→ public→ table→ student_info

第2步:

然后我们将右键单击选定的 (student_info) 表,然后单击截断选项,然后从给定的下拉列表中再次选择截断选项,如下面的屏幕截图所示:

第3步:

截断表弹出窗口将出现在屏幕上,我们将在其中单击确定按钮以截断student_info表。

第4步:

单击“确定”按钮后,表格将被自动删除,如下面的屏幕截图所示,“表格”部分中没有可用的表格。

PostgreSQL 使用 SQL Shell (PSQL) 截断表

要使用psql中的 truncate table 命令删除表,我们将按照以下步骤操作:

第1步:

打开SQL shell (psql),其中显示了必要的详细信息。之后,我们将使用我们在 PostgreSQL 安装过程中创建的密码登录到 Postgres 数据库服务器。

我们已连接到Postgres 服务器,如下面的屏幕截图所示:

第2步:

现在,我们将连接到我们之前创建的特定数据库服务器,即javatpoint并借助以下命令:

\c javatpoint     

第3步:

最后,我们将执行 truncate table 命令来删除特定的表。

PostgreSQL 在 psql 中截断表的示例

要实时了解 PostgreSQL 截断表的工作,我们将看到以下示例:

从一张表中删除所有数据

在下面的示例中,要从student_information表中删除所有数据,我们使用 TRUNCATE TABLE 命令:

truncate table student_information; 

执行完上面的命令后,我们会得到如下输出,表示student_information表数据已经成功移除。

以下命令用于在RESTART IDENTITY选项的帮助下重置特定列中的值:

TRUNCATE TABLE table_name   
RESTART IDENTITY;  

让我们看一个示例,我们尝试重置特定列的值。

下面的命令从student_information表中删除所有行并返回与stu_name列相关的顺序:

TRUNCATE TABLE student_information   
RESTART IDENTITY;  

执行完上面的命令后,我们会得到如下输出,表示student_information表记录已经成功删除

本质上,上述命令不会按与student_information表中列相关的顺序重新启动值,因为Truncate table命令默认使用CONTINUE IDENTITY选项。

删除多个表中的所有记录

如果我们想同时截断一个或多个表中的所有记录,我们使用逗号 (,) 分隔每个表。

句法

以下语法用于删除多个表中的所有数据:

TRUNCATE TABLE table_name1, table_name2 ...;  

例如

以下命令用于删除人员和部门表中的所有数据:

TRUNCATE TABLE persons, department;  

执行完上面的命令后,我们会得到如下输出,这表明persons和department表数据已经被成功移除。

从具有外键引用的表中删除所有记录

如果我们需要经常截断一个包含其他表的外键引用的表,并且没有在 TRUNCATE TABLE 命令中列出。

默认情况下,TRUNCATE TABLE命令不会从具有外键引用的表中删除任何记录。

因此,在这种情况下,我们将在TRUNCATE TABLE命令中使用CASCADE选项来删除包含外键引用的表和其他表中的记录。

句法

从具有外键引用的表中删除所有记录的基本语法如下:

TRUNCATE TABLE table_name   
CASCADE;  

例如

在下面的示例中,我们将通过外键约束从employee表和其他引用persons表的表中删除数据:

TRUNCATE TABLE employee CASCADE;  

执行上述命令后,我们将得到以下输出,其中已成功删除employee表数据。

CASCADE 选项用于附加的想法,或者如果我们想从我们不想要的表中删除记录。

TRUNCATE TABLE命令使用RESTRICT选项来避免我们截断表,该表默认具有外键约束引用。

PostgreSQL TRUNCATE TABLE 和事务

如果我们在事务中使用 truncate table 命令,我们可以安全地回滚它,因为它是事务安全的。

PostgreSQL TRUNCATE TABLE 和 ON DELETE 触发器

如果我们将触发器应用于用于表的 TRUNCATE TABLE 命令,我们必须为该特定表指定 Before Truncate /After Truncate 触发器。

而TRUNCATE TABLE命令从表中删除所有记录,并且不使用任何on deleting triggers选项与表链接。

总结:

  • 要从大表中删除所有记录,我们可以使用TRUNCATE TABLE命令。
  • 如果一个表通过外键约束引用另一个表,我们可以使用CASCADE 选项来截断一个表和其他表。
  • truncate table 命令不使用On Delete trigger ,而是使用Before / After truncate触发器。

热门文章

优秀文章