TRUNCATE, DELETE,和 DROP的区别

TRUNCATE,DELETE和DROP之间的区别是最常见的面试问题之一。这是它们之间的一些共同差异。

TRUNCATE

TRUNCATE SQL查询从表中删除所有行,且不记录单个行的删除日志。
下面的示例从“客户”表中删除所有数据。

TRUNCATE TABLE Customers;   
  • TRUNCATE是DDL命令
  • TRUNCATE是使用表锁执行的,整个表都被锁定以删除所有记录。
  • 不能将WHERE子句与TRUNCATE一起使用。
  • TRUNCATE删除表中的所有行。
  • 最小化事务日志中的日志记录,因此提高了性能。
  • TRUNCATE TABLE通过取消分配用于存储表数据的数据页面来删除数据,并仅在事务日志中记录页面的解除分配。
  • 如果表包含任何标识列,则将标识列重置为其种子值。
  • 要在表上使用Truncate,您至少需要对该表具有ALTER权限。
  • Truncate使用的事务空间比Delete语句少。
  • Truncate不能与索引视图一起使用。
  • TRUNCATE比DELETE快。

DELETE

要执行DELETE队列,需要对目标表具有删除权限。如果需要在DELETE中使用WHERE子句,则还需要选择权限。
 
以下查询从“客户”表中删除所有行。

DELETE FROM Customers;  
GO

以下SQL查询从Orders大于1000的客户表中删除所有行。

DELETE FROM Customers WHERE OrderId > 1000;  
GO 
  • DELETE是DML命令。
  • 使用行锁执行DELETE,表中​​的每一行都被锁定以进行删除。
  • 我们可以使用带DELETE的where子句来过滤和删除特定记录。
  • DELETE命令用于根据WHERE条件从表中删除行。
  • 它维护日志,因此比TRUNCATE慢。
  • DELETE语句一次删除一行,并在事务日志中为每个删除的行记录一个条目。
  • 列保持的标识DELETE保留该标识。
  • 要使用DELETE,您需要在表上具有DELETE权限。
  • DELETE使用比Truncate语句更多的事务空间。
  • DELETE可以与索引视图一起使用。

DROP


DROP表查询将删除一个或多个表定义以及这些表的所有数据,索引,触发器,约束和权限规范。 DROP命令需要对该表所属的模式具有ALTER权限,对该表具有CONTROL权限或db_ddladmin固定数据库角色的成员身份。
 
以下SQL查询从当前数据库中删除“客户”表及其数据和索引。

DROP TABLE Customers ; 

 

  • DROP命令从数据库中删除表。
  • 所有表的行,索引和特权也将被删除。
  • 没有DML触发器将被触发。
  • 操作无法回滚。
  • DROP和TRUNCATE是DDL命令,而DELETE是DML命令。
  • 可以回滚(删除)DELETE操作,而不能回滚DROP和TRUNCATE操作
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值