SQL DROP和SQL的Truncate的区别
在本文中,我们将学习DROP和Truncate命令以及它们之间的区别。
什么是DROP命令?
DROP是数据定义语言的一个命令,它从数据库表中删除定义索引、数据、约束和触发器。
在结构化查询语言中,该语句从关系数据库管理系统 (RDBMS) 中删除元素。
与SQL的TRUNCATE命令相比,DROP命令执行速度快。但是,由于存在许多复杂性,其执行时间较慢。
我们还可以使用ALTER TABLE语句和DROP关键字从表中删除一个或多个列。
删除数据库的语法如下:
DROP DATABASE Database_Name;
在此语法中,我们必须指定要从系统中删除的数据库的名称。
注意:当我们删除数据库时要小心,因为DROP命令会删除该数据库中的所有表、索引和视图。
删除表的语法如下所示:
DROP TABLE Table_Name;
在这个语法中,我们必须指定我们想要从数据库中删除的表的名称。
删除多个表的语法如下所示:
DROP TABLE Table_Name1, Table_Name2, ......, Table_NameN;
在这个语法中,我们可以使用逗号来指定多个表格。
删除索引的语法如下所示:
DROP INDEX INDEX_Name;
在这个语法中,我们必须在INDEX关键字之后指定索引的名称。
与SQL中的DELETE命令不同,数据库用户在使用DROP命令后无法从表中回滚数据。
DROP命令从存储中释放表空间,因为它会永久删除系统中的表及其内容。
DROP命令示例
让我们在SQL中创建一个新表来实现DROP查询。以下CREATE TABLE查询使用五个字段创建了 Employee 表。
CREATE TABLE Employee
(
Employee_ID INT AUTO_INCREMENT PRIMARY KEY,
Emp_Name VARCHAR (50),
Emp_Salary INT NOT NULL,
Emp_CityVarchar (50),
Emp_EmailID VARCHAR (100)
) ;
下面的查询语句从数据库中删除了创建的Employee表:
DROP TABLE Employee;
什么是TRUNCATE命令?
TRUNCATE也是数据定义语言的另一个命令。该命令从表中永久地删除所有的值。
该命令不能删除特定的记录,因为它不与WHERE子句一起使用。
SQL中TRUNCATE命令的语法:
TRUNCATE TABLE Table_Name;
在上述语法中,我们必须指定要从表中删除所有记录的表的名称。
TRUNCATE命令示例
让我们创建一个新的表来实现SQL中的TRUNCATE查询。以下CREATE TABLE语句创建了一个名为Student_Details的表,其中包含五列:
CREATE TABLE Student_Details
(
Student_ID INT NOT NULL,
Student_Name varchar(100),
Student_Course varchar(50),
Student_Age INT,
Student_Marks INT
);
以下SQL查询使用INSERT INTO语句将学生记录插入上述表中:
INSERT INTO Student_Details VALUES (101, Anuj, B.tech, 20, 88);
INSERT INTO Student_Details VALUES (102, Raman, MCA, 24, 98);
INSERT INTO Student_Details VALUES (104, Shyam, BBA, 19, 92);
INSERT INTO Student_Details VALUES (107, Vikash, B.tech, 20, 78);
INSERT INTO Student_Details VALUES (111, Monu, MBA, 21, 65);
INSERT INTO Student_Details VALUES (114, Jones, B.tech, 18, 93);
INSERT INTO Student_Details VALUES (121, Parul, BCA, 20, 97);
INSERT INTO Student_Details VALUES (123, Divya, B.tech, 21, 89);
INSERT INTO Student_Details VALUES (128, Hemant, MBA, 23, 90);
INSERT INTO Student_Details VALUES (130, Nidhi, BBA, 20, 88);
让我们使用以下SELECT语句来查看上表的记录:
SELECT * FROM Student_Details;
Student_ID | Student_Name | Student_Course | Student_Age | Student_Marks |
---|---|---|---|---|
101 | Anuj | B.tech | 20 | 88 |
102 | Raman | MCA | 24 | 98 |
104 | Shyam | BBA | 19 | 92 |
107 | Vikash | B.tech | 20 | 78 |
111 | Monu | MBA | 21 | 65 |
114 | Jones | B.tech | 18 | 93 |
121 | Parul | BCA | 20 | 97 |
123 | Divya | B.tech | 21 | 89 |
128 | Hemant | MBA | 23 | 90 |
130 | Nidhi | BBA | 20 | 88 |
以下查询语句会从上述的Student_Details表中删除所有行:
TRUNCATE TABLE Student_Details;
以下语句验证表是否已被成功截断:
SELECT * FROM Student_Details;
输出:
Student_ID | Student_Name | Student_Course | Student_Age | Student_Marks |
---|---|---|---|---|
以下表格显示了结构化查询语言中DROP和TRUNCATE命令之间的区别:
DROP | TRUNCATE |
---|---|
SQL中的DROP命令会删除表的定义和其中的数据。 | SQL中的TRUNCATE命令会删除表中的所有数据。 |
这个查询将释放内存中的表空间。 | TRUNCATE查询不会从存储中释放表空间。 |
在DROP命令中,表的视图不存在。 | 在截断命令中,表的视图存在。 |
在DROP命令中,完整性约束将自动从表中删除。 | 在这个命令中,完整性约束不会被删除。 |
在DROP查询中,删除的空间不会被使用。 | 删除的空间被使用,但少于DELETE语句。 |
DROP查询会快速删除数据,但会有很多复杂性。 | SQL中的TRUNCATE查询比DROP查询更快。 |