【SQL Server】三种基本表的删除方式(drop,delete,truncate)辨析

一、drop

SQL语句

drop table 表名

含义:删除内容和定义,释放空间。简单来说就是把整个表从数据库去掉。如果想再添加数据,只能再新建一个表。

​ 例如:一个班就是一个表,学生就是表中的数据,,学生的职务就是定义。

​ drop table class 就是把整个班移除,学生和职务都消失。

二、truncate

SQL语句

truncate table 表名

含义:删除内容、释放空间但不删除定义。不删除定义也很容易理解就是保留表的数据结构。与drop不同的是,他只是达到清空表数据的效果而已。如果想再添加数据,可以直接添加。

​ 例如:同样也是一个班,他只去除所有的学生。班还在,职务还在,如果有新增的学生可以进去,也可以分配上职务。

注意:truncate 不能删除行数据,要删就要把表清空

三、delete

SQL语句

delete table 表名
delete table 表名 where 条件

含义:删除内容、不删除定义、不释放空间。虽然是删除整个表的数据,但是其是一行一行地删的,所以会比truncate的效率低。

补充:

1、truncate在功能上与不带where 子句的 delete语句相同:均删除表中的全部行。

2、truncate 比 delete速度快,且使用的系统和事务日志资源少。

3、delete 语句每次删除一行,并在事务日志中为所删除的每行记录一项。所以可以对delete操作进行rollback。

4、truncate 在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令Delete将被撤销,而 truncate 则不会被撤销。
5、truncate 是一个DDL语言,像其他所有的DDL语言一样,他将被隐式提交,不能对 truncate 使用rollback命令。
6、truncate 将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过 truncate 操作后的表比delete操作后的表要快得多。
7、truncate 不能触发任何Delete触发器。
8、当使用truncate将表清空后,表和表的索引将重新设置成初始大小,而delete则不能,delete只能继续按删除前索引大小重新开始。
9、truncate不能清空父表。

两者最大的区別就是delete是写日志文件的,而truncate则不写日志直接刪除,前者可恢复,而后者无法恢复,后者的危险性更高,所以一般不建议使用truncate,常用delete
————————————————
参考:https://blog.csdn.net/qq_45239614/article/details/105478598

你可能感兴趣的:(SQL,Server)