首先讲一下,truncate命令: 日志
语法:TRUNCATE TABLE table;索引
表格里的数据被清空,存储空间被释放。事务
运行后会自动提交,包括以前其它未提交的会话,于是一旦清空没法回退。资源
只有表格的建立者或者其余拥有删除任意表格权限的用户(如DBA)才能清空表格。get
TRUNCATE TABLE dept30;table
Table truncated.权限
------------------------------------------------------------------------------------------------------------语法
下面讲一下truncate命令和delete的区别:数据
一、TRUNCATE在各类表上不管是大的仍是小的都很是快。若是有ROLLBACK命令DELETE将被撤销,而TRUNCATE则不会被撤销。tab
二、TRUNCATE是一个DDL语言,向其余全部的DDL语言同样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。
三、TRUNCATE将从新设置高水平线和全部的索引。在对整个表和索引进行彻底浏览时,通过TRUNCATE操做后的表比DELETE操做后的表要快得多。
四、TRUNCATE不能触发任何DELETE触发器。
五、不能授予任何人清空他人的表的权限。
六、当表被清空后表和表的索引讲从新设置成初始大小,而delete则不能。
七、不能清空父表。 TRUNCATE TABLE (schema)table_name DROP(REUSE) STORAGE 在默认是 DROP STORAGE 当使用DROP STORAGE时将缩短表和表索引,将表收缩到最小范围,并从新设置NEXT参数。REUSE STORAGE不会缩短表或者调整NEXT参数在特殊状况下使用 REUSE ST
DELETE语句执行删除的过程是每次从表中删除一行,而且同时将该行的的删除操做做为事务记录在日志中保存以便进行进行回滚操做。
TRUNCATE TABLE 则一次性地从表中删除全部的数据页并不把单独的删除操做记录记入日志保存,删除行是不能恢复的。而且在删除的过程当中不会激活与表有关的删除触发器。执行速度快。
===========================================================
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:两者均删除表中的所有行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。
DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 经过释放存储表数据所用的数据页来删除数据,而且只在事务日志中记录页的释放。
TRUNCATE TABLE 删除表中的全部行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。
若是想保留标识计数值,请改用 DELETE。
若是要删除表定义及其数据,请使用 DROP TABLE 语句。
--------------------------------------------------------------------------------------
以上只是介绍一下两个命令的用法,下面说一下个人推荐用法,truncate命令速度快,占用资源少,若是你能肯定当前表里的数据彻底没有用的话可使用此命令,方面快捷,若是数据或许有用,那你最好作好备份,不然一旦使用此命令,就悔不当初了,固然delete命令仍是有好处的,若是不能保证此后的数据有不有用,可是当前不知道,或者干脆就是误删了,那么使用rollback命令直接回滚,固然rollback命令能够添加回滚点,定位回滚,恢复数据比较方便,因此说对与初学者,楼主强烈建议你们删除数据时使用delete命令,麻烦事麻烦了点,可是保险一点,这是个人教训啊,误用truncate命令清空了一个表,还好这个表是可有可无的,不然我就只有以谢天下了。固然,很是强烈的建议是,作任何操做前,对于有用的数据都要事先备份,无论用不用得着,有备无患。