SQL TRUNCATE表格

SQL TRUNCATE表格

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 (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'Pune', 4500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (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 Pune 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命令进行更改后,需要手动进行COMMIT操作才能使修改生效。 当使用TRUNCATE命令时,对表的修改会自动提交。
它逐个删除行,并对每个删除应用相同的条件。 它一次性删除所有信息。
在这种情况下,WHERE子句用作条件。 WHERE子句不可用。
删除后所有行都会被锁定。 TRUNCATE使用表锁定,锁定页面以防止删除。
它会在日志文件中记录每个事务。 只记录数据存储在其上的页面的释放活动。
它比TRUNCATE命令消耗更多的事务空间。 它消耗较少的事务空间。
如果存在标识列,则不会将表标识重置为创建表时的值。 它将表的标识返回到给定的种子值。
它需要授权才能删除。 它需要表更改的权限。
对于大型数据库,速度比较慢。 速度比较快。

TRUNCATE vs DROP

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

然而,这两个命令仍然存在一些区别,总结如下表:

DROP TRUNCATE
DROP命令用于从数据库中删除整个表,包括其定义、索引、约束、数据等。 TRUNCATE命令用于从表中删除所有行,无论是否满足任何条件,并重置表的定义。
它是DDL(数据定义语言)命令。 它也是DDL(数据定义语言)命令。
表空间完全从内存中释放。 表仍然存在于内存中。
所有完整性约束被删除。 完整性约束仍然存在于表中。
需要对表模式和表分别拥有ALTER和CONTROL权限,才能执行此命令。 只需要ALTER权限即可截断表。
DROP命令比TRUNCATE慢,但比DELETE快。 TRUNCATE命令比DROP和DELETE命令都快。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程