📅  最后修改于: 2020-11-30 01:24:16             🧑  作者: Mango
在本节中,我们将了解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中,我们可以通过两种方式执行截断表:
要在pgAdmin中使用truncate table命令删除表,我们将执行以下步骤:
步骤1
打开您的pgAdmin ,然后转到对象树,我们将转到数据库,移动到架构下的public部分,然后选择要截断的特定表(student_info) 。
数据库→javatpoint→架构→公共→表→student_info
第2步
然后,我们将右键单击所选的(student_info)表,然后单击“截断”选项,然后从给定的下拉列表中再次选择“截断”选项,如下面的屏幕快照所示:
第三步
截断表弹出窗口将出现在屏幕上,我们将单击“确定”按钮以截断student_info表。
第四步
单击“确定”按钮后,该表将被自动删除,如下面的屏幕截图所示,“表”部分中没有可用的表。
要在psql中使用truncate table命令删除表,我们将执行以下步骤:
步骤1
打开SQL shell(psql) ,其中显示了必要的详细信息。之后,我们将使用在PostgreSQL安装过程中创建的密码登录到Postgres数据库服务器。
正如下面的屏幕截图所示,我们已经连接到Postgres服务器:
第2步
现在,我们将使用以下命令连接到我们先前创建的特定数据库服务器javatpoint:
\c javatpoint
第三步
最后,我们将执行truncate table命令以删除特定的表。
为了实时了解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选项,该选项可避免我们截断该表,该表默认情况下具有外键约束引用。
如果我们在事务中使用truncate table命令,则可以安全地回滚它,因为它是事务安全的。
如果将触发器应用于用于表的TRUNCATE TABLE命令,则必须为该特定表指定“截断前” /“截断后”触发器。
而TRUNCATE TABLE命令从表中删除所有记录,并且它不使用任何“删除触发器”选项来链接表。