主要区别
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”子句,因为它要么全有要么全无。
什么是删除(delete)?
在数据库SQL中,DELETE意味着从表中删除一个或多个记录或数据的语句。可以使用移除所有记录的条件来定义移除/删除子集。一些数据库管理系统(DBMs)如MySQL允许使用一个delete语句(也称为multi table delete)从多个表中删除行。DELETE语句的语法是DELETE FROM table_name[WHERE condition]。现在,符合“WHERE”条件的任何行都将从表中删除。如果语句中省略了“WHERE”子句,则表中的所有行都将被删除。因此,“DELETE”语句应该谨慎使用。此外,“DELETE”语句不返回任何行;也就是说,它不会生成结果集。
主要区别
- DELETE是数据操作语言(DML)命令,TRUNCATE是数据定义语言(DDL)命令。
- TRUNCATE比DELETE快得多,因为它可以立即擦除所有数据。
- 删除中需要“WHERE”条件。如果语句中省略了“WHERE”子句,则表中的所有行都将被删除。但我们不能在“TRUNCATE TABLE”语句中指定“WHERE”子句,因为它要么全有要么全无。
- DELETE从表中删除部分或所有行,而TRUNCATE删除所有行。
- DELETE导致表上的所有DELETE触发器触发,而TRUNCATE操作期间没有触发触发器,因为它不适用于单个行。
- Delete可用于索引视图,TRUNCATE不能用于索引视图。
- DELETE使用行锁执行,表中的每一行都被锁定删除,TRUNCATE使用表锁执行,所有表都被锁定以删除所有记录。