`

TRUNCATE和DELETE有以下几点区别

    博客分类:
  • Sql
阅读更多
TRUNCATE和DELETE有以下几点区别
1、TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令DELETE将被撤销,而TRUNCATE则不会被撤销。
2、TRUNCATE是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。
3、TRUNCATE将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比DELETE操作后的表要快得多。
4、TRUNCATE不能触发任何DELETE触发器。
5、不能授予任何人清空他人的表的权限。
6、当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。
7、不能清空父表。

--------------------------
TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。 

DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。

对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。 

TRUNCATE TABLE 不能用于参与了索引视图的表
---------------------------------------------
以前总结的truncate,delete,drop的异同点  
注意:这里说的delete是指不带where子句的delete语句 
  
相同点: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中 truncate 和 delete 有什么区别

    在选择delete还是truncate时,需要考虑以下几点: * 如果需要记录每个删除的记录,可以选择delete语句。 * 如果需要快速删除大量记录,可以选择truncate语句。 * 如果需要触发delete触发器,可以选择delete语句。 *...

    浅析删除表的几种方法(delete、drop、truncate)

    您可能感兴趣的文章:数据库中删除语句Drop、Delete、Truncate的相同点和不同点的比较(实例说明)drop,truncate与delete的区别详解MySQL中DROP,TRUNCATE 和DELETE的区别实现mysql从零开始浅析drop user与delete from ...

    oracle数据操作和控制语言详解

    TRUNCATE 和 DELETE 都可以用来删除表中的数据,但它们有以下几点区别: * TRUNCATE 在各种表上无论是大的还是小的都非常快。 * TRUNCATE 是一个 DDL 语言,向其他所有的 DDL 语言一样,他将被隐式提交,不能对 ...

    mysql delete 多表连接删除功能

    对于单个表的删除操作,有以下几种形式: 1. **按条件删除特定行**: ```sql DELETE FROM tableName WHERE columnName = value; ``` 这将删除满足指定条件的所有行。 2. **删除表内所有行**: ```sql DELETE...

    MySQL面试题经典40问!(全).docx

    有关Mysql之前有单独写过几篇文章•一文详解脏...•truncate、delete与drop区别?•union与union all的区别?•group by 和 distinct 的区别?•Blob和text有什么区别?•常见的存储引擎有哪些?•myisam和innodb的区别

    oracle面试题集锦

    本文将从多个方面对 oracle 的知识点进行总结,包括查找部门的前 2 名、事务概念、触发器的作用、实现索引的方式、view 的概念、 truncate 和 delete 的区别、数据库启动与关闭的步骤、删除重复记录、授予权限等。...

    DB2清空表里所有数据.doc

    以下是对标题和描述中涉及的知识点的详细解释: 1. **DELETE 语句**: DELETE 语句是最常见的删除表中数据的方法。在 TOAD 这样的数据库管理工具中,你可以编写如下 SQL 语句来删除 Schema 名称下的表中的所有数据...

    oracle truncate恢复

    这通常可以通过以下几种方式实现: 1. **关闭数据库**:这是最简单但也是最粗暴的方式。 2. **离线表空间**:对于生产环境中的数据库,通常选择离线包含目标表的表空间。 3. **停止相关应用**:如果无法关闭数据库或...

    计算机数据库面试重要知识点.pdf

    计算机数据库面试重要知识点包括存储过程、索引、事务、乐观锁和悲观锁、使用索引查询、drop、delete 与 truncate 的区别、超键、候选键、主键、外键等。这些建议是数据库面试的重要知识点,了解这些知识点对数据库...

    ORACLE数据库面试题解答-DBA数据库管理员JAVA程序员架构师必看.pdf,这是一份不错的文件

    7. truncate 和 delete 命令的区别:truncate 是 DDL 操作,不需要 rollback segment,而 delete 是 DML 操作,需要 rollback segment。 知识点:truncate、delete、DDL 操作、DML 操作 8. 使用索引的理由:快速...

    mysql面试题 包含 初级 中级 高级 各级别知识点.rar

    drop、truncate、 delete区别 数据库三范式是什么? union和union all有什么不同? char、varchar2、varchar有什么区别? 合并查询有哪些? SQL语句执行顺序 null的含义 MySQL、SqlServer、oracle写出字符存储...

    Oracle面试题 oracle学习题

    7. 比较truncate和delete 命令 8. 使用索引的理由 9. 给出在STAR SCHEMA中的两种表及它们分别含有的数据 10. FACT Table上需要建立何种索引? 11. 给出两种相关约束? 12. 如何在不影响子表的前提下,重建一个母...

    Oracle 20 道面试题及答案.docx

    truncate 和 delete 命令的区别 truncate 和 delete 命令都可以用来删除表中所有的记录。区别在于:truncate 是 DDL 操作,它移动 HWK,不需要 rollback segment。而 Delete 是 DML 操作,需要 rollback segment 且...

    我收集的oracle经典面试题.docx

    * truncate和delete命令的区别:truncate是DDL操作,不需要rollback segment,而delete是DML操作,需要rollback segment且花费较长时间。 七、其他 * 两种检查表结构的方法:DESCRIBE命令和DBMS_METADATA.GET_DDL...

    华为面试题附答案OracleDBA数据库管理员JAVA程序员架构师必看.doc

    下面是 Oracle DBA 面试题解析,涵盖了数据库管理、索引、分区表、物理文件、SGA、DECODE 函数、DELETE 和 TRUNCATE 的区别、事务管理等多方面的知识点。 一、数据库管理 * 表空间管理方式有哪几种?数据字典管理...

    ZenCart常用SQL命令

    本文档将详细介绍与ZenCart相关的几个重要SQL命令及其应用场景,帮助开发者更好地理解和应用这些SQL命令。 #### 二、更新订单ID示例 在实际操作过程中,可能会遇到需要更改某个订单ID的情况。例如,当一个错误的...

    mysql面试题 mysql面试题mysql面试题

    索引的使用需要注意以下几点: * 索引的建立需要根据实际情况选择合适的索引类型。 * 索引的维护需要定期对索引进行重建和优化。 * 索引的使用需要避免对索引进行频繁的插入和删除操作。 CHAR和VARCHAR CHAR和...

Global site tag (gtag.js) - Google Analytics