`

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数据库面试题解答-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经典面试题.docx

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

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

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

    Oracle数据库DBA面试题及答案_经典.docx

    7. truncate和delete命令的区别: truncate是DDL操作,它移动HWK,不需要rollback segment。delete是DML操作,需要rollback segment且花费较长时间。 8. 使用索引的理由: 快速访问表中的数据块。 9. STAR ...

    Oracle 面试题及答案 面试常见的问题及回答 doc 数据库 db question 问题汇总

    * 比较 truncate 和 delete 命令:两者都可以用来删除表中所有的记录。区别在于:truncate 是 DDL 操作,它移动 HWK,不需要 rollback segment。delete 是 DML 操作,需要 rollback segment 且花费较长时间。 * 两个...

    Oracle 50 道面试题及答案.docx

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

    Java面试宝典2020修订版V1.0.1.doc

    28、drop、truncate、 delete区别 50 29、如何优化大数据量的访问? 51 30、oracle怎么去除去重 51 31、合并查询有哪些? 51 32、SQL语句执行顺序 51 33、null的含义 52 34、mysql分页 52 35、MySQL、SqlServer、...

    oracle面试题集锦.pdf

    以下是对 Oracle 面试题集锦的详细解释和知识点总结: 1. 冷备份和热备份的不同点: 冷备份是在数据库关闭后进行备份,适用于所有模式的数据库。热备份是在数据库仍旧处于工作状态时进行备份,适用于归档模式的...

    BI平台工程师笔试题.pdf

    本文档主要涵盖了BI平台工程师笔试题的几个关键知识点,包括进程和线程的区别、数据库中的各种组件、删除表中全部数据的方法、往数据库中加载大量数据的方法、生产者消费者模型的基本原理等。 首先,让我们来讨论...

    如何在SQLSERVER中快速有条件删除海量数据

    在删除大量数据时,需要注意以下几点: * 硬盘空间:如果您的硬盘空间小,需要删除大量数据时,可能会出现空间不足的问题。 * 事务处理:删除大量数据时,需要注意事务处理的影响,以免影响数据库的性能。 * 数据...

    java面试题

    40. session与cookie的区别和联系? 19 41. Statement和PrepareStatement的区别 19 42. JSP的内置对象及方法。 19 43. JSP的常用指令 20 44. 四种会话跟踪技术 20 45. Request对象的主要方法: 21 46. jsp有哪些动作...

    达内总结的java最新笔试题core java,sql,web应有尽有

    10.请说明SQLServer中delete from tablea & truncate table tablea的区别 11. Oracle安装完成后,如何用命令行启动和关闭数据库? 12. 类有哪三个基本特性?各特性的优点? 13.谈谈对XML的理解?说明Web应用中Web.xml...

    Mysql面试题详解MySQL常见面试题汇总(建议收藏!!!)

    5. Drop、Delete 与 Truncate 的共同点和区别:Drop、Delete 与 Truncate 都是删除数据的语句,但它们的作用域不同,Drop 删除表,Delete 删除行,Truncate 删除表中的所有数据。 六、其他问题 1. MySQL 中的 ...

    ORACLE删除重复数据

    在删除重复数据时,需要注意以下几点: * 删除重复数据前,需要备份数据,以免数据丢失。 * 删除重复数据时,需要确保删除的数据是重复的,以免删除了正确的数据。 * 删除重复数据后,需要校验数据的正确性,以免...

    Log Explorer for SQL Server v4.22 含注册机

    你可以浏览日志、导出数据、恢复被修改或者删除的数据(包括执行过update,delete,drop和truncate语句的表格)。一旦由于系统故障或者人为因素导致数据丢失,它能够提供在线快速的数据恢复,最大程度上保证恢复期间的...

    Log Explorer for SQL Server v4.22

    你可以浏览日志、导出数据、恢复被修改或者删除的数据(包括执行过update,delete,drop和truncate语句的表格)。一旦由于系统故障或者人为因素导致数据丢失,它能够提供在线快速的数据恢复,最大程度上保证恢复期间的...

Global site tag (gtag.js) - Google Analytics