SQL - 截断表



SQL 提供命令来完全截断表,一次性完成,而不是逐条删除表记录,这将是一个非常耗时且繁琐的过程。

SQL TRUNCATE TABLE 语句

SQL 的 TRUNCATE TABLE 命令用于清空表。此命令是 DROP TABLE 和 CREATE TABLE 语句的序列,需要 DROP 权限。

您还可以使用 DROP TABLE 命令来 删除表,但它会从数据库中删除完整的表结构,如果您希望再次存储一些数据,则需要重新创建此表。

语法

TRUNCATE TABLE 命令的基本语法如下所示。

TRUNCATE TABLE table_name;

示例

首先,让我们创建一个名为 CUSTOMERS 的表,该表可以存储客户的个人详细信息,包括他们的姓名、年龄、地址和薪水等,如下所示:

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),       
   PRIMARY KEY (ID)
);

现在使用 INSERT 语句将值插入此表,如下所示:

INSERT INTO CUSTOMERS VALUES 
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );

表将创建如下:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

以下 SQL TRUNCATE TABLE CUSTOMER 语句将删除 CUSTOMERS 表的所有记录:

TRUNCATE TABLE CUSTOMERS;

验证

现在,CUSTOMERS 表已被截断,SELECT 语句的输出将如以下代码块所示:

SELECT * FROM CUSTOMERS;

输出如下:

Empty set (0.00 sec)

TRUNCATE vs DELETE

尽管 TRUNCATE 和 DELETE 命令在逻辑上工作方式相似,但它们之间存在一些主要差异。它们在下面的表格中详细说明。

DELETE TRUNCATE

SQL 中的 DELETE 命令 根据 WHERE 子句中指定的条件删除表中的一行或多行。

SQL 的 TRUNCATE 命令用于删除表中的所有行,无论是否满足任何条件。

它是 DML(数据操纵语言)命令。

它是 DDL(数据定义语言)命令。

在对 DELETE 命令进行更改后,需要手动提交才能提交修改。

使用 TRUNCATE 命令时,对表的修改会自动提交。

它一次删除一行,并对每次删除应用相同的标准。

它一次删除所有信息。

WHERE 子句在这种情况下充当条件。

WHERE 子句不可用。

删除后所有行都被锁定。

TRUNCATE 使用表锁,锁定页面以防止删除。

它在日志文件中记录每个事务。

仅记录存储数据的页面的释放。

与 TRUNCATE 命令相比,它消耗更多的事务空间。

它占用的事务空间相对较少。

如果存在标识列,则表标识不会重置为表创建时的值。

它将表标识返回到作为种子给定的值。

它需要删除授权。

它需要表更改权限。

对于大型数据库,它要慢得多。

它快得多。

TRUNCATE vs DROP

与重置表结构的 TRUNCATE 不同,DROP 命令 完全释放内存中的表空间。它们都是数据定义语言 (DDL) 操作,因为它们与数据库对象的定义交互;这允许数据库在执行这些命令后自动提交,并且没有回滚的机会。

但是,这两个命令之间仍然存在一些差异,这些差异已在以下表格中总结:

DROP TRUNCATE

SQL 中的 DROP 命令从数据库中删除整个表,包括其定义、索引、约束、数据等。

TRUNCATE 命令用于删除表中的所有行,无论是否满足任何条件,并重置表定义。

它是 DDL(数据定义语言)命令。

它也是 DDL(数据定义语言)命令。

表空间完全从内存中释放。

表仍然存在于内存中。

所有完整性约束都被删除。

完整性约束仍然存在于表中。

分别需要表架构和表的 ALTER 和 CONTROL 权限才能执行此命令。

只需要 ALTER 权限即可截断表。

DROP 命令比 TRUNCATE 慢得多,但比 DELETE 快。

TRUNCATE 命令比 DROP 和 DELETE 命令都快。

广告