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表中的字段,保存时,弹出上面的窗体,无法保存. 解决方法为:[工具]->[选项]->[设计器]中,去掉“阻止保存要求重新创建表的更改”前的勾选.
随机推荐
- 转载:移动前端开发之viewport的深入理解
原文作者:无双 原文链接:http://www.cnblogs.com/2050/p/3877280.html 在移动设备上进行网页的重构或开发,首先得搞明白的就是移动设备上的viewport了,只有 ...
- BZOJ1485: [HNOI2009]有趣的数列
Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足a1<a3<…&l ...
- Windows环境下的NodeJS+NPM+Bower安装配置步骤
Windows下的NodeJS安装是比较方便的(v0.6.0版本之后,支持windows native),只需要登陆官网(http://nodejs.org/),便可以看到首页的“INSTALL”按钮 ...
- viso 由于形状保护和/或图层属性设置不能进行编辑
viso 由于形状保护和/或图层属性设置不能进行编辑 2003: 若要变通解决此问题,删除 从删除 的保护属性,当您尝试删除一个受保护的组件.若要这样做,请按照下列步骤操作:在 Visio 2003或 ...
- Node.js的函数返回值
先看一段代码: function select(sqlscript){ var result = ""; sql.connect(config, function( ...
- 在springmvc中,获取Connection接口
ServletContext context = request.getSession().getServletContext();WebApplicationContext wac = WebApp ...
- wego微购RSS、Sitemap、Ping、腾讯拍拍网购采集插件
和哥们研究淘宝客,找到微购这个程序觉得挺不错的,但是地图和RSS功能不是特别完善,于是小憩一下,做了下初级的拓展,分享给大家,开源精神嘛,大家也可以去我的网站我要购物平台去看看. 1.拓展后台seoA ...
- 将bootstrap弹出框的点击弹出改为鼠标移入弹出
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 【软件工程实践一】git使用心得
第一次软工实践,我们需要做的是学习如何使用github,并将本地库的文件添加到远程库中,以下是我进行实践的工程. [一.git的安装及准备工作] 首先从http://msysgit.github.io ...
- [LintCode] Left Pad 左填充
You know what, left pad is javascript package and referenced by React: Github link One day his autho ...