📜  PostgreSQL截断表

📅  最后修改于: 2020-11-30 01:24:16             🧑  作者: Mango

PostgreSQL截断表

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

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

truncate命令的语法

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

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

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

Parameter Description
CASCADE This option automatically truncates all tables, which contains the foreign-key references to other tables, or any tables added to the collection due to CASCADE.
RESTART IDENTITY It repeatedly restarts orders owned by columns of the truncated tables.
CONTINUE IDENTITY It does not change the values of orders, and it is the default option.
RESTRICT It is also a default option, which can decline to truncate if other tables contain the foreign-key references of tables, which are not mentioned in the command.

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

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

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

PostgreSQL使用pgAdmin截断表

要在pgAdmin中使用truncate table命令删除表,我们将执行以下步骤:

步骤1

打开您的pgAdmin ,然后转到对象树,我们将转到数据库,移动到架构的public部分,然后选择要截断的特定表(student_info)

数据库→javatpoint→架构→公共→表→student_info

第2步

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

第三步

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

第四步

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

PostgreSQL使用SQL Shell(PSQL)截断表

要在psql中使用truncate table命令删除表,我们将执行以下步骤:

步骤1

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

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

第2步

现在,我们将使用以下命令连接到我们先前创建的特定数据库服务器javatpoint:

\c javatpoint   

第三步

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

psql中的PostgreSQL截断表示例

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

删除一个表中的所有数据

在下面的示例中,要从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;

输出量

执行完上述命令后,我们将获得以下输出,该输出显示人员和部门表数据已成功删除。

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

如果我们需要频繁截断一个表,该表包含其他表的外键引用,而该表未在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命令,则必须为该特定表指定“截断前” /“截断后”触发器。

TRUNCATE TABLE命令从表中删除所有记录,并且它不使用任何“删除触发器”选项来链接表。

总览

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