【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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值