`

drop>; truncate >; delete

阅读更多

注意:这里说的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,再重新导入/插入数据

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区别汇总

    - 执行速度一般为 `drop > truncate > delete`。 #### 六、使用建议 - 如果需要删除表中的所有数据并保留表结构,推荐使用 `truncate`。 - 如果需要根据特定条件删除表中的部分数据,应该使用 `delete` 并加上...

    truncate,delete,drop的异同点

    一般来说,三种命令的执行速度排序为:`DROP > TRUNCATE > DELETE`。 - **DROP**:最快,因为它不仅仅是删除数据,而是将整个表结构以及相关联的对象都一并删除。 - **TRUNCATE**:比 DELETE 快,因为 TRUNCATE ...

    drop,truncate与delete的区别

    4. _速度的区别_:一般来说,drop > truncate > delete。 5. _安全性的区别_:小心使用 drop 和 truncate,尤其没有备份的时候。否则哭都来不及。使用上,想删除部分数据行用 delete,注意带上 where 子句。回滚段要...

    秒懂drop、truncate和delete的区别

    (1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。...(3)一般而言,drop>truncate>delete (4)应用范围。 TRUNCATE只能对TABLE;

    SQL删除语句DROP、TRUNCATE、 DELETE 的区别

    - 在性能上,DROP > TRUNCATE > DELETE,DROP最快,DELETE最慢。 **使用建议**: - 删除特定行时,使用DELETE并带上WHERE子句。 - 需要快速清空表且不触发触发器或考虑回滚时,使用TRUNCATE。 - 完全删除表及其依赖...

    delete,truncate和drop的区别

    ### delete,truncate和drop的区别详解 #### 一、概述 在数据库管理中,经常会遇到需要删除数据或表的情况。为了确保数据的准确性和安全性,理解`delete`、`truncate`和`drop`这三个命令的区别至关重要。本文将详细...

    sql之truncate_、delete与drop区别.pdf

    通常情况下,从性能角度来看,`DROP` > `TRUNCATE` > `DELETE`。这是因为: - `DROP` 操作不仅速度快,而且还释放了表占用的所有空间。 - `TRUNCATE` 删除所有数据的速度较快,因为它不涉及事务日志记录或触发器处理...

    详解SQL中drop、delete和truncate的异同

    4. **执行速度**:通常,执行速度为`DROP > TRUNCATE > DELETE`,因为`DROP`和`TRUNCATE`不需要逐行处理,而`DELETE`可能需要。 5. **安全性**:`DROP`和`TRUNCATE`操作非常危险,特别是如果没有备份时,因为数据...

    MySQL篇(带答案).pdf

    * 一般而言,drop > truncate > delete * 应用范围。TRUNCATE 只能对 TABLE;DELETE 可以是 table 和 view * TRUNCATE 和 DELETE 只删除数据,而 DROP 则删除整个表(结构和数据)。 drop、truncate 和 delete 都是...

    delete、truncate、drop的区别以及该如何选择

    前言 上周同事小姐姐问我:“哈哥你看,我发现MySQL有bug,我下午为了清理磁盘,明明删除了100万条MySQL数据,磁盘不仅没有变小,反而更满了呢??” 那你是怎么删除的?...drop > truncate >> DELETE 二

    SQL语句中----删除表数据drop、truncate和delete的用法

    SQL语句中----删除表数据drop、truncate和delete的用法,对你爱不完

    详解Truncate delete drop三者的区别

    详细阐述了Oracle中三种删除的方式truncate,drop和delete三者的区别和联系.

    sql之truncate、delete与drop区别

    在SQL语言中,`TRUNCATE`、`DELETE` 和 `DROP` 是三个非常重要的数据操作语句,它们各自有着不同的用途和特性。理解这些差异对于数据库管理至关重要,特别是对于数据安全性和性能优化方面。 首先,`TRUNCATE` 语句...

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

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

    MySQL删除表操作实现(delete、truncate、drop的区别)

    执行速度方面,`DROP > TRUNCATE > DELETE`,因为`DROP`直接删除表定义,`TRUNCATE`删除数据但保留表定义,而`DELETE`逐行处理,可能涉及触发器和事务日志记录。在处理大量数据时,如果只需要清空表,`TRUNCATE`比`...

    常见面试问答题.docx

    * 数据删除顺序:DROP > TRUNCATE > DELETE。 三、表连接 * 表连接的种类:LEFT JOIN、INNER JOIN、FULL OUTER JOIN。 * ON和WHERE的区别:ON条件是在生成临时表时使用的条件,WHERE条件是在临时表生成之后对临时...

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

    delete 和 truncate 只删除表的数据不删除表的结构,速度 일반来说:drop> truncate >delete。delete 语句是 DML,这个操作会放到 rollback segment 中,事务提交之后才生效;如果有相应的trigger,执行的时候将被...

Global site tag (gtag.js) - Google Analytics