SQL DELETE 和 TRUNCATE 的区别
1. DELETE语句
DELETE 是一个 DML(数据操作语言)命令,当我们指定要从表或关系中删除或删除的行(元组)时使用。DELETE 命令可以包含 WHERE 子句。如果 WHERE 子句与 DELETE 命令一起使用,则它仅删除或删除那些满足条件的行(元组),否则默认情况下它会从表中删除所有元组(行)。请记住,DELETE 记录行删除。
DELETE 命令的语法:
DELETE FROM TableName
WHERE condition;
2. TRUNCATE语句
TRUNCATE 是一个 DDL(数据定义语言)命令,用于从表中删除所有行或元组。与 DELETE 命令不同,TRUNCATE 命令不包含 WHERE 子句。在 TRUNCATE 命令中,不会记录每个已删除数据页的事务日志。与 DELETE 命令不同,TRUNCATE 命令速度很快。使用 TRUNCATE 命令后我们无法回滚数据。
TRUNCATE 命令的语法:-
TRUNCATE TABLE TableName;
下面来看看 DELETE 和 TRUNCATE 命令之间的区别:-
编号 | DELETE | TRUNCATE |
---|---|---|
1 | DELETE 命令用于删除指定的行(一个或多个)。 | TRUNCATE命令用于删除表中的所有行。 |
2 | DELETE是一个DML(数据操作语言)命令。 | TRUNCATE是一个 DDL(数据定义语言)命令。 |
3 | DELETE 命令中可能有一个 WHERE 子句,用于过滤记录。 | TRUNCATE 命令中可能没有 WHERE 子句。 |
4 | 在 DELETE 命令中,元组在删除之前被锁定。 | 在TRUNCATE命令中,数据页在删除表数据之前被锁定。 |
5 | DELETE 语句一次删除一个行,并在事务日志中为每个删除的行记录一个条目。 | TRUNCATE TABLE 通过解除分配用于存储表数据的数据页来移除数据,并且仅在事务日志中记录页解除分配。 |
6 | DELETE 命令比 TRUNCATE 命令慢。 | TRUNCATE 命令比 DELETE 命令快。 |
7 | 要使用删除,需要对表具有 DELETE 权限。 | 要在表上使用 TRUNCATE,我们至少需要表上的 ALTER 权限。 |
8 | 对表使用DELETE 语句后,列的标识保留标识。 | 如果表包含标识列,则标识该列将重置为其种子值。 |
9 | 删除可以与索引视图一起使用。 | TRUNCATE不能与索引视图一起使用。 |