SQL查询中DELETE和TRUNCATE的区别


TRUNCATE语句和DELETE语句都属于用于删除表中存储数据的SQL查询类别。它们对不再需要的表记录或行执行删除操作。使用DELETE命令时,会在删除的每个表项之前应用条件。换句话说,可以一次删除一行或多行。但是,使用TRUNCATE命令,表中的每一行都会同时被删除。

当我们使用DELETE查询删除内容时,会在事务日志中为每一行生成一个日志条目。因此,在提交更改之前,我们可以使用ROLLBACK检索记录。此外,如果我们使用TRUNCATE操作,我们可以使用ROLLBACK过程检索记录。但是,TRUNCATE只跟踪保存数据的页面的释放。这是关键区别。

什么是DELETE命令?

DELETE是DML(数据操作语言)命令的一个例子。它可以用来从表中一次删除一行(记录)或多行(记录)。

在DELETE命令的上下文中,WHERE子句表示必须满足的条件,以便仅从目标表中删除不需要的行。

每次运行DELETE查询时,都会在事务日志中生成一个日志文件。它首先保存记录,然后删除它们。因此,如果我们删除了一行或多行关键行,我们将能够使用ROLLBACK命令检索它们。

由于DELETE语句是DML命令,我们需要手动提交更改。请记住,ROLLBACK必须在COMMIT之前完成。

语法

DELETE from any_table Where condition;

什么是TRUNCATE命令?

TRUNCATE是一种DDL(数据定义语言)命令。在处理表时,我们使用此命令一次删除所有记录。

TRUNCATE命令不像WHERE子句那样使用任何条件来定义条件。因此,我们应该只在目标数据库中的所有数据都不需要的情况下使用它。

TRUNCATE命令使用表锁而不是行锁来锁定表和页面,然后再执行TRUNCATE操作。因此,只记录用于存储条目的页面的释放;因此,它比DELETE语句快得多。

因为TRUNCATE是DDL命令,所以提交操作无需人工干预即可完成。执行TRUNCATE命令时,标识符将恢复到其种子值。

语法

TRUNCATE TABLE any_table_name;

何时使用DELETE和TRUNCATE?

请注意,DELETE和TRUNCATE的主要职责相同,都是从表中删除记录。但是,这两个命令执行的操作略有不同。

DROP命令是唯一可以删除表模式、索引、约束和触发器的命令。这两个命令都不能做到这一点。

  • 如果要删除表中的所有记录,请使用TRUNCATE命令。

  • 使用DELETE命令从表中删除单个记录。

DELETE和TRUNCATE的区别

下表重点介绍了DELETE和TRUNCATE的主要区别:

比较依据 DELETE TRUNCATE
定义 SQL中的DELETE命令根据行中指定的条件删除表中的一行或多行。 SQL的TRUNCATE命令用于清除表中的所有行,无论是否满足任何条件。
语言 它是DML(数据操作语言)命令。 它是DDL(数据定义语言)命令。
提交 对DELETE命令进行更改后,我们需要手动进行COMMIT。 使用TRUNCATE命令时,您的更改会自动提交。
过程 它一次删除一行,并对每次删除应用条件。 它一次性清除所有信息。
条件 WHERE子句在此用作条件。 WHERE子句在此不用作条件。
删除后所有行都将被锁定。 它通过使用表锁来实现此目的,该表锁会锁定页面,因此无法删除它们。
日志 它在日志文件中记录每个事务。 唯一记录的活动是存储数据的页面的释放。
事务空间 与TRUNCATE命令相比,它消耗更多的事务空间。 与DELETE命令相比,它更少地使用事务空间。
标识 如果存在标识列,则表标识不会重置为表创建时的值。 它将表标识返回到其作为种子值赋予的值。
权限 它需要删除权限。 它需要表更改权限。
速度 对于大型数据库,它要慢得多。 它更快,更准确地说,是即时的。

结论

SQL DELETE和SQL TRUNCATE命令都可以用来从表中删除记录。但是,DELETE命令使用WHERE子句指定表中要执行删除操作的行,而TRUNCATE命令不使用任何子句,而是同时删除所有行。这是这两个命令的主要区别。

请记住,TRUNCATE命令可以像DELETE命令一样撤销。

更新于:2022年8月4日

17K+ 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.