SQL-truncate && delete && drop 的区别

时间:2021-10-01 21:54:56

有些人在删除表的所有记录的时候,喜欢这样来——不给DELETE 语句提供WHERE 子句,表中的所有记录都将被删除。但这种方法是不可取的,正确的应该使用

TRUNCATE TABLE tb_name

为什么要用TRUNCATE TABLE 语句代替DELETE语句?

因为:虽然TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。

DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。

TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

TRUNCATE,DELETE,DROP放在一起比较:

TRUNCATE TABLE:删除内容、释放空间但不删除定义。

DELETE TABLE:删除内容不删除定义,不释放空间。

DROP TABLE:删除内容和定义,释放空间。

truncate删除表比较快,但删除的数据不能恢复,只能删除表中的所有数据

而delete删除比truncate慢,删除的数据可以恢复,后面可以跟where条件删除某些指定记录。