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命令一样撤销。
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP