sql server 中删除表中数据truncate和delete的区别(转载自.net学习网)
我们都知道truncate table可以用来删除整个表的内容,它与delete后面不跟where条件的效果是一样。但除此之外,我们还清楚它们之间有其它的区别吗?本章我们将一起讨论truncate与delete区别。
我们先看一下truncate table的说明:
删除表中的所有行,而不记录单个行删除操作。TRUNCATE TABLE在功能上与没有WHERE子句的DELETE语句相同;但是,TRUNCATE TABLE速度更快,使用的系统资源和事务日志资源更少。
truncate table的语法:
区别:
1,truncate删除数据后,表中标识列重置为定义的种子值,也就是标识列重新开始计数,而使
用delete删除数据,则会保留标识计数器,新的自增量会从删除前的最大值开始计数。
2,使用truncate删除数据将不触发触发器,而delete会触发delete触发器。
3,truncate所占用的事务日志空间会很少,因为truncate不会计录删除过程,而delete每删除一行数据,都会在事务日志中记录一条数据,已便日后能够恢复数据。也就是说,使用truncate删除的数据不可恢复,但速度比delete要快很多。而通过delete删除的数据可以通过备份文件来恢复。
4,truncate是一个ddl语言,它会被隐式提交,所以不能通过rollback命令来撤消truncate命令。
以上四点为比较重要的部分,知道了上面四点后,也就大概能够清楚的了解什么时候用truncate,什么时候用delete了。
以下为比较抽象的区别:
5,truncate使用的锁比较少,因为使用truncate table时是锁定表和页,而使用delete则是锁定表中的所有行以便删除。
6,使用delete删除所有数据,在表中仍会留下一个空页,也就是删除前的数据所占用的空间还被占用着,不会释放掉(当前可以通过其它命令来释放),而使用truncate table则不会留下任何页。
7,truncate会重新设置表的索引,所以使用truncate操作后的表的索引速度会比delete操作后的表要快一些。
注意:虽然truncate table在删除数据的速度上会占有一定的优势,但并不是在所有的情况我们都可以使用truncate,存在以下情况就使用truncate就会失败。
1,要删除数据的表包含foreign key约束,而delete则可以通过级联删除来删除相关联的数据。
2,被索引视图引用过的表,也不能使用truncate.
以上为本人整理的truncate table与delete之间的区别,有不对或漏掉的部分请大家指出来,一起讨论。
sql server 中删除表中数据truncate和delete的区别(转载自.net学习网)的更多相关文章
- SQL删除语句DROP、TRUNCATE、 DELETE 的区别
主要介绍了SQL删除语句DROP.TRUNCATE. DELETE 的区别,帮助大家更好的理解和学习sql语句,感兴趣的朋友可以了解下 DROP: 1 DROP TABLE test; 删除表test ...
- sql记录去重(SQL查询或者删除表中重复记录)
.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select*from people where peopleIdin (select peopleIdfrom peopl ...
- drop、truncate和delete的区别 [转载]
drop.truncate和delete的区别 本文转载自: https://www.cnblogs.com/zhizhao/p/7825469.html (1)DELETE语句执行删除的过程 ...
- Sql server中用现有表中的数据创建Sql的Insert插入语句
之前,在Codeproject发表过一篇关于用现有表中数据创建Insert的Sql语句的存储过程,今天将其搬到这里来,注意本存储过程仅适用于SQL SERVER. 介绍 一些时候,你想导出一些现有表中 ...
- SQL Server批量向表中插入多行数据语句
因自己学习测试需要,需要两个有大量不重复行的表,表中行数越多越好.手动编写SQL语句,通过循环,批量向表中插入数据,考虑到避免一致问题,设置奇偶行不同.个人水平有限,如有错误,还望指正. 语句如下: ...
- SQL Server 向堆表中插入数据的过程
堆表中 IAM 记录着的数据页,表的各个数据页之间没有联系.也就是说一个页面它不会知道自己的前一页是谁,也不知道自己的后一页是谁. 插入数据时先找到IAM页,再由pfs(page free spac ...
- SQL SERVER数据库的表中修改字段的数据类型后,不能保存
在数据库里面建了一个表,可是由于对SQL SERVER的建表功能不熟悉,不知道把主键设成什么是好,就先设置了个TEXT类型,可是后来朋友们告诉我说,TEXT类型容易让数据文件变得很大,还 是改成一 ...
- SQL SERVER将指定表中的指定字段按照(,)逗号分隔
不开心呀,早知道不跳了,一跳跳坑里来了. 使用方式: DECLARE @ConsigneeAddressId INT; SET @ConsigneeAddressId = 1; SELECT * F ...
- 解决SQL server 2014 修改表中的字段,无法保存的问题。
修改PROJECT表中的字段,保存时,弹出上面的窗体,无法保存. 解决方法为:[工具]->[选项]->[设计器]中,去掉“阻止保存要求重新创建表的更改”前的勾选.
随机推荐
- 让 Web 站点崩溃最常见的七大原因
磁盘已满 导致系统无法正常运行的最可能的原因是磁盘已满.一个好的网络管理员会密切关注磁盘的使用情况,隔一定的时间,就需要将磁盘上的一些负载转存到备份存储介质中(例如磁带). 日志文件会很快用光所有 ...
- HTML无刷新提交表单
通常对于无刷新提交表单,我们都是运用ajax实现的.前段时间跟着老大了解到另一种无刷新提交表单的方法,是利用iframe框架实现的.现在整理出来分享给大家. 第一种: (html页面) <!DO ...
- 【BZOJ1067】【POJ2637】降雨量
1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3004 Solved: 767[Submit][Status] ...
- 预定义指令之debug
1)根据你必须知道的.NET一书, #define DEBUG class Program { static void Main(string[] args) { #if DEBUG Console. ...
- Big Chocolate
Big Chocolate 题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=19127 Big Chocolat ...
- [CareerCup] 17.14 Unconcatenate Words 断词
17.14 Oh, no! You have just completed a lengthy document when you have an unfortunate Find/Replace m ...
- 演示一个使用db vault进行安全控制的示例
1.确认数据库版本 2.安装db vault组件 通过DBCA配置db vault: 3.创建测试用户及表 4.创建域并加入用户 5.测试演示
- bzoj3594: [Scoi2014]方伯伯的玉米田--树状数组优化DP
题目大意:对于一个序列,可以k次选任意一个区间权值+1,求最长不下降子序列最长能为多少 其实我根本没想到可以用DP做 f[i][j]表示前i棵,操作j次,最长子序列长度 p[x][y]表示操作x次后, ...
- CCLabelAtlas
1.CCLabelAtlas 的具体用法 CCLabelAtlas *pLabel = new CCLabelAtlas;pLabel ->initWithString("0123&q ...
- Lambda表达式动态拼接(备忘)
EntityFramework动态组合Lambda表达式作为数据筛选条件,代替拼接SQL语句 分类: C# Lambda/Linq Entity Framework 2013-05-24 06:58 ...