TRUNCATE 删除表,无法回退。默认选择为整个表的内容,所以不能加条件。
TRUNCATE 删除表,无法回退。默认选择为整个表的内容,所以不能加条件。
DELETE 删除表,可以回退。可以带where 条件。建议使用delete。但是TRUNCATE 删除表数据比delete要快。
使用TRUNCATE TABLE语句
TRUNCATE TABLE语句提供了一种删除表中所有记录的快速方法。因为TRUNCATE TABLE语句不记录日志,只记录整个数据页的释放操作,而DELETE语句对每一行修改都记录日志,所以使用TRUNCATE TABLE语句进行删除操作总是比没有指定条件的DELETE语句效率高。TRUNCATE TABLE立即释放了表中数据及索引所占用的全部空间,同时也释放了分配给所有索引的空间。其语法格式如下:
与DELETE语句相比,TRUNCATE TABLE具有以下优点:
l 所用的事务日志空间较少 DELETE语句每次删除一行,并在事务日志中为所删除的每行记录一个项。TRUNCATE TABLE通过释放用于存储表数据的数据页来删除数据,并且在事务日志中只记录页释放。
l 使用的锁通常较少 当使用行锁执行DELETE语句时,将会锁定表中各行以便删除。TRUNCATE TABLE始终锁定表和页,而不是锁定各行。
l 表中将毫无例外地不留下任何页 执行DELETE语句后,表仍会包含空页。例如,必须至少使用一个排他(LCK_M_X)表锁,才能释放堆中的空表。如果执行删除操作时没有使用表锁,表(堆)中将包含许多空页。对于索引,删除操作会留下一些空页,尽管如此,不过这些页会通过后台清除进程迅速释放。
那么可不可以用TRUNCATE TABLE代替不带WHERE子句的DELETE语句呢?在以下几种情况是不行的:
l 在需要保留标识的情况下不能用TRUNCATE TABLE,因为TRUNCATE TABLE会重置标识。
l 在需要使用触发器的情况下不能使用TRUNCATE TABLE,因为它不会激发触发器。
l 对于由FOREIGN KEY约束引用的表(即主键所在的表,不是外键所在的表)不能使用TRUNCATE TABLE.
l 对于参与了索引视图的表不能使用TRUNCATE TABLE,注意指的是索引视图,并非普通视图。
那么用户需要具有什么权限才可以使用TRUNCATE TABLE呢?若要使用TRUNCATE TABLE语句,必须是表的所有者,具有DBA权限或表的ALTER权限。对于基表,TRUNCATE TABLE语句需要有表的排他访问权限,因为操作是原子操作(要么删除所有行,要么不删除任何行)。这意味着所有以前打开的游标和引用要截断的表的游标都必须关闭,并且必须发出COMMIT或ROLLBACK命令释放对表的引用。对于临时表,每个用户都有自己的数据副本,不需要排他访问。
下面结合一个简单的实例来说明如何使用TRUNCATE TABLE语句。比如需要删除商品信息表中的所有数据,可以使用如下语句:
由于TRUNCATE TABLE操作是不进行日志记录的,所以建议在TRUNCATE TABLE语句之前使用BACKUP DATABASE语句来对数据库做备份。 |
TRUNCATE 删除表,无法回退。默认选择为整个表的内容,所以不能加条件。的更多相关文章
- 表单验证:$tablePrefix(定义表前缀);$trueTableName = 'yonghu',找到真实表名(yonghu)表;create($attr,0)两个参数;批量验证(返回数组);ajax+动态验证表单
*$tablePrefix是定义在Model中的,优先级大于配置文件中,如果项目中表前缀全部比如为"a_",并且在配置文件中定义了 'DB_PREFIX'=>'a_' 后期如 ...
- (转) Delete/Truncate删除,释放表空间、降低高水位线、resize释放磁盘空间相关优化
硬盘空间不足,打算删除数据库中的多余数据,但删除数据后,硬盘硬盘空间不能释放.[delete后用:alter table table_name move truncate后用:alter tab ...
- Oracle的闪回特性之恢复truncate删除表的数据
Oracle的闪回特性之恢复truncate删除表的数据 SQL> show parameter flashback NAME T ...
- MySQL之存储引擎(表类型)的选择
和大部分的数据库不同,MySQL中有一个存储引擎的概念,用户可以根据数据存储的需求来选择不同的存储引擎.本次博客就来介绍一下MySQL中的存储引擎.MySQL版本 5.7.19. 概述 MySQL的存 ...
- 谈谈数据库中MyISAM与InnoDB区别 针对业务类型选择合适的表
MyISAM:这个是默认类型,它是基于传统的ISAM类型, ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法. ...
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
- Django-开放静态资源-获取请求携带的数据-pychram连接数据库-修改Django默认数据库-DjangoORM操作--表管理-记录管理-01
目录 关于静态资源访问 为什么要配置静态文件才能获取静态资源 常见的静态文件种类 如何配置来开启访问权限 禁用浏览器缓存 django的自动重启机制(热启动) 静态文件接口动态解析 向服务器发送数据 ...
- truncate删除一个分区,测试全局索引是否失效
目的,有一个清理数据的需求,需要删除历史的一个分区所有记录信息,但是存在主键global索引,如何更好的维护. 如下测试流程一 提前创建好一个已时间created 字段作为分区键的范围分区表 SQL& ...
- Greenplum 行存、列存,堆表、AO表的原理和选择
转载自: https://github.com/digoal/blog/blob/master/201708/20170818_02.md?spm=a2c4e.11153940.blogcont179 ...
随机推荐
- DedeCMS的分页标签pagelist支持中英文的修改方法[转]
不得不感叹DedeCMS的强大,可定制性和扩展性太强了,就算不懂php也可以很轻松的修改源码. 今天碰到个新问题,用DedeCMS搞了个中英双语的网站,其他的都修改好了,上线之前发现分页条中英文版中都 ...
- IOS--手势控制的使用
手势识别是具有互斥的原则的,比如单击和双击,如果它识别出一种手势,其后的手势将不被识别 // 添加单击的手势UITapGestureRecognize UITapGestureRecognizer * ...
- bxSlider 在网页里添加幻灯片效果
幻灯片效果在网页上很常见,本文介绍用 bxSlider 轻松实现的方法. bxSlider是什么 bxSlider 是用 JQuery 和 CSS 实现网页中幻灯片效果的工具.可在 http://bx ...
- 在 Mac OS X Yosemite 10.10.5 上配置 OpenGL 编程环境
这个教程主要参考了youtube上的视频 Getting Started in OpenGL with GLFW/GLEW in Xcode 6 ,这个视频有点问题,不能照搬.本人通过自己摸(瞎)索( ...
- selenium之xpath定位和input文本
selenium之xpath定位和input文本 xpath简单定位: 打开浏览器的F12 在自己需要定位的元素的那里右键 选择copy->xpath selenium获取input下的文本: ...
- 一加3,CM13蓝牙共享互联网 无效。
一加3准备把4G网络共享给魅族PRO5. 但在一加3的蓝牙设置里怎么勾选都无用. 最后发现在要在PRO5上设置才行. 1.在蓝牙列表中,点击带圈的感叹号. 2.选择“互联网访问”. - --
- Matlab绘制幅值谱和相位谱
1. 对于直接给出频响函数的情况 这里以滑动平均的频响函数作为例子,滑动窗口为[0, 4]. 上式中M2=4. >> w=0:0.001:2*pi; >> h1=1-exp(- ...
- Apache Shiro 使用手册(四)Realm 实现
在认证.授权内部实现机制中都有提到,最终处理都将交给Real进行处理.因为在Shiro中,最终是通过Realm来获取应用程序中的用户.角色及权限信息的.通常情况下,在Realm中会直接从我们的数据源中 ...
- Spring MVC中使用 Swagger2 构建Restful API
1.Spring MVC配置文件中的配置 [java] view plain copy <!-- 设置使用注解的类所在的jar包,只加载controller类 --> <contex ...
- activiti自定义流程之整合(六):获取我的申请任务
流程启动后,流程节点便进入到了任务相关的部分.可以看到我之前的做法是在启动节点就绑定了form表单,启动时就填写相关的数据.实际上在之前我的做法是不对开始节点做任何操作,知道任务节点的时候再填写相关的 ...