SQL删除语句DROP、TRUNCATE、 DELETE 的区别

所属分类: 数据库 / MsSql 阅读数: 1508
收藏 0 赞 0 分享

DROP:

DROP TABLE test;

删除表test,并释放空间,将test删除的一干二净。

TRUNCATE:

TRUNCATE test;

删除表test里的内容,并释放空间,但不删除表的定义,表的结构还在。

DELETE:

1、删除指定数据

删除表test中年龄等于30的且国家为US的数据

DELETE FROM test WHERE age=30 AND country='US';

2、删除整个表

仅删除表test内的所有内容,保留表的定义,不释放空间。

DELETE FROM test 或者 TRUNCATE test;

truncate table 命令将快速删除数据表中的所有记录,但保留数据表结构。这种快速删除与 delete from 数据表的删除全部数据表记录不一样,delete 命令删除的数据将存储在系统回滚段中,需要的时候,数据可以回滚恢复,而truncate 命令删除的数据是不可以恢复的。

相同点

truncate 和不带 where 子句的 delete, 以及 drop 都会删除表内的数据。

不同点:

  • 1. truncate 和 delete 只删除数据不删除表的结构(定义) ,drop 语句将删除表的结构被依赖的约束(constrain), 触发器(trigger), 索引(index); 依赖于该表的存储过程/函数将保留, 但是变为 invalid 状态。
  • 2.delete 语句是 dml, 这个操作会放到 rollback segement 中, 事务提交之后才生效; 如果有相应的 trigger, 执行的时候将被触发。 truncate, drop 是 ddl, 操作立即生效, 原数据不放到 rollback segment 中, 不能回滚。 操作不触发 trigger。
  • 3.delete 语句不影响表所占用的 extent, 高水线(high watermark)保持原位置不动。 显然 drop 语句将表所占用的空间全部释放 。 truncate 语句缺省情况下见空间释放到 minextents 个 extent, 除非使用 reuse storage; truncate会将高水线复位(回到最开始)。
  • 4.速度:一般来说: drop > truncate > delete 。
  • 5.安全性: 小心使用 drop 和 truncate, 尤其没有备份的时候。否则哭都来不及。

最后

使用上, 想删除部分数据行用 delete, 注意带上 where 子句。 回滚段要足够大。

想删除表, 当然用 drop。

想保留表而将所有数据删除。如果和事务无关, 用 truncate 即可。 如果和事务有关, 或者想触发 trigger, 还是用 delete。

如果是整理表内部的碎片, 可以用 truncate 跟上 reuse stroage, 再重新导入/插入数据。

以上就是SQL删除语句DROP、TRUNCATE、 DELETE 的区别的详细内容,更多关于sql删除语句的资料请关注脚本之家其它相关文章!

更多精彩内容其他人还在看

对有insert触发器表取IDENTITY值时发现的问题

赶快查了下msdn,原来@@IDENTITY还有这么多讲究
收藏 0 赞 0 分享

SQL SERVER 查询正在实行的SQL语句

SQL SERVER 查询正在实行的SQL语句的实现代码
收藏 0 赞 0 分享

sql 随机抽取几条数据的方法 推荐

前段时间在做项目的时刻。总是遇到这样一个问题。就是要怎么去让首页显示的内容不断的变化。想了很久。也没有什么结果。后面去想了一下。得出以下一个结果
收藏 0 赞 0 分享

sql 多条件组合查询,并根据指定类别找出所有最小子类别的SQL语句备忘

多条件组合查询,并根据指定类别找出所有最小子类别的SQL语句备忘
收藏 0 赞 0 分享

Java 实现连接sql server 2000

JDBC技术事实上是一种能通过JAVA语言访问任何结构化数据库的应用程序接口(API)(Sun这样说的,我也不知道是不是真的),而且现在的JDBC 3.0据Sun说也能访问Execel等电子表格程序!
收藏 0 赞 0 分享

SQL Server 不存在或访问被拒绝(转)

在使用 SQL Server 的过程中,用户遇到最多的问题莫过于连接失败了。一般而言,有两种连接SQL Server 的方式,一是利用 SQL Server 自带的客户端工具
收藏 0 赞 0 分享

分页查询 效率最高

给大家分享个效率最高的分页查询 5000万级别有效 比 ROWNUMBER 和Top效率高
收藏 0 赞 0 分享

sqlserver 系统存储过程 中文说明

sqlserver 系统存储过程这样大家就知道这些存储过程的作用了。
收藏 0 赞 0 分享

sql 多表连接查询

sql 多表连接查询语句代码,大家可以参考下。
收藏 0 赞 0 分享

SQL SERVER 自增列

判断Table是否存在自增列(Identity column)
收藏 0 赞 0 分享
查看更多