Sql 简明教程

SQL - TRUNCATE TABLE

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

The SQL TRUNCATE TABLE Statement

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

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

Syntax

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

TRUNCATE TABLE table_name;

Example

首先,让我们创建一个 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

NAME

AGE

ADDRESS

SALARY

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;

Verification

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

SELECT * FROM CUSTOMERS;

输出如下:

Empty set (0.00 sec)

TRUNCATE vs DELETE

即使 TRUNCATE 和 DELETE 命令在逻辑上工作类似,它们之间也存在一些主要差异。它们在下面的表格中进行了详细说明。

DELETE

TRUNCATE

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

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

它是一个 DML(数据操作语言)命令。

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

在执行 DELETE 命令对修改进行提交后,需要进行手动 COMMIT。

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

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

它一次删除所有信息。

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

WHERE 子句不可用。

所有行在删除后都会被锁定。

TRUNCATE 使用表锁,该锁锁定页面,使其无法被删除。

它在日志文件中记录每笔交易。

记录的唯一操作是对存储数据所在的页面的分配。

与 TRUNCATE 命令相比,它占用更大的事务空间。

所占事务空间相对较少。

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

它将表标识返回为其作为种子给出的值。

需要获取删除权限。

需要获取表更改权限。

对于大型数据库而言,它的速度要慢得多。

It is much faster.

TRUNCATE vs DROP

与重置表结构的 TRUNCATE 不同, DROP command 会完全从内存中释放表空间。它们都是与数据库对象定义交互的数据定义语言 (DDL) 操作;在执行这些命令时,数据库会自动提交,而无机会进行回滚。

然而,这两个命令之间仍然存在一些差异,已在以下表格中进行了总结 -

DROP

TRUNCATE

SQL 中的 DROP 命令将整个表(含其定义、索引、约束、数据等)从数据库中删除。

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

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

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

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

该表仍保留在内存中。

已删除所有完整性约束。

完整性约束仍保留在表中。

需要在表架构和表上分别具有 ALTER 和 CONTROL 权限,才能执行此命令。

只需具有 ALTER 权限即可截断表。

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

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