内容
主要区别
DELETE和TRUNCATE是结构化查询语言(SQL)中用于从表中删除记录或数据的两个术语。尽管两个命令的最终结果相同,但是这两个命令之间还存在一些差异,需要理解。 DELETE和TRUNCATE之间的主要区别是DELTE是数据操作语言(DML)命令,而TRUNCATE是数据定义语言(DDL)命令。
什么是TRUNCATE?
TRUNCATE也是一个记录的操作。 TRUNCATE TABLE语句是SQL中的DDL命令,用于标记要解除分配的表的范围。作为此操作的结果,表中的所有数据都会立即删除,通常会绕过许多完整性强制机制。它是在SQL:2008标准中引入的。从逻辑上讲,“ TRUNCATE TABLE mytable”语句等同于不带“ WHERE”子句的“ DELETE FROM mytable”语句。 “ TRUNCATE TABLE”会通过取消分配表使用的数据页来立即删除表中的所有数据。这样可以减少记录删除操作的资源开销以及所需的锁数量。我们无法在“ TRUNCATE TABLE”语句中指定“ WHERE”子句,因为它是全部或没有。
什么是删除?
在数据库SQL中,DELETE表示从表中删除一个或多个记录或数据的语句。可以使用删除所有记录的条件为删除/删除定义一个子集。像MySQL这样的某些数据库管理系统(DBM)允许使用一个DELETE语句(也称为多表DELETE)从各种表中删除行。 DELETE语句的语法为DELETE FROM table_name 。现在,与“ WHERE”条件匹配的任何行将从表中删除。如果语句中省略了“ WHERE”子句,则会删除表中的所有行。因此,请谨慎使用“删除”声明。此外,“ DELETE”语句不返回任何行;那将不会生成结果集。
关键差异
- DELETE是数据操作语言(DML)命令,而TRUNCATE是数据定义语言(DDL)命令。
- 与DELETE相比,TRUNCATE的速度要快得多,因为它会立即擦除所有数据。
- 在DELETE中需要输入“ WHERE”条件。 。如果语句中省略了“ WHERE”子句,则会删除表中的所有行。但是我们无法在“ TRUNCATE TABLE”语句中指定“ WHERE”子句,因为它是全部或全部。
- DELETE删除表中的部分或全部行,而TRUNCATE删除表中的所有行。
- DELETE会触发表上的所有DELETE触发器,而TRUNCATE操作期间不会触发任何触发器,因为它不适用于单个行。
- 删除可用于索引视图,而TRUNCATE不可用于索引视图。
- 使用行锁执行DELETE,并锁定表中的每一行以进行删除,而使用表锁执行TRUNCATE,并锁定所有表以删除所有记录。