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,再重新导入/插入数据
分享到:
相关推荐
在选择delete还是truncate时,需要考虑以下几点: * 如果需要记录每个删除的记录,可以选择delete语句。 * 如果需要快速删除大量记录,可以选择truncate语句。 * 如果需要触发delete触发器,可以选择delete语句。 *...
您可能感兴趣的文章:数据库中删除语句Drop、Delete、Truncate的相同点和不同点的比较(实例说明)drop,truncate与delete的区别详解MySQL中DROP,TRUNCATE 和DELETE的区别实现mysql从零开始浅析drop user与delete from ...
TRUNCATE 和 DELETE 都可以用来删除表中的数据,但它们有以下几点区别: * TRUNCATE 在各种表上无论是大的还是小的都非常快。 * TRUNCATE 是一个 DDL 语言,向其他所有的 DDL 语言一样,他将被隐式提交,不能对 ...
对于单个表的删除操作,有以下几种形式: 1. **按条件删除特定行**: ```sql DELETE FROM tableName WHERE columnName = value; ``` 这将删除满足指定条件的所有行。 2. **删除表内所有行**: ```sql DELETE...
有关Mysql之前有单独写过几篇文章•一文详解脏...•truncate、delete与drop区别?•union与union all的区别?•group by 和 distinct 的区别?•Blob和text有什么区别?•常见的存储引擎有哪些?•myisam和innodb的区别
本文将从多个方面对 oracle 的知识点进行总结,包括查找部门的前 2 名、事务概念、触发器的作用、实现索引的方式、view 的概念、 truncate 和 delete 的区别、数据库启动与关闭的步骤、删除重复记录、授予权限等。...
以下是对标题和描述中涉及的知识点的详细解释: 1. **DELETE 语句**: DELETE 语句是最常见的删除表中数据的方法。在 TOAD 这样的数据库管理工具中,你可以编写如下 SQL 语句来删除 Schema 名称下的表中的所有数据...
这通常可以通过以下几种方式实现: 1. **关闭数据库**:这是最简单但也是最粗暴的方式。 2. **离线表空间**:对于生产环境中的数据库,通常选择离线包含目标表的表空间。 3. **停止相关应用**:如果无法关闭数据库或...
计算机数据库面试重要知识点包括存储过程、索引、事务、乐观锁和悲观锁、使用索引查询、drop、delete 与 truncate 的区别、超键、候选键、主键、外键等。这些建议是数据库面试的重要知识点,了解这些知识点对数据库...
7. truncate 和 delete 命令的区别:truncate 是 DDL 操作,不需要 rollback segment,而 delete 是 DML 操作,需要 rollback segment。 知识点:truncate、delete、DDL 操作、DML 操作 8. 使用索引的理由:快速...
drop、truncate、 delete区别 数据库三范式是什么? union和union all有什么不同? char、varchar2、varchar有什么区别? 合并查询有哪些? SQL语句执行顺序 null的含义 MySQL、SqlServer、oracle写出字符存储...
7. 比较truncate和delete 命令 8. 使用索引的理由 9. 给出在STAR SCHEMA中的两种表及它们分别含有的数据 10. FACT Table上需要建立何种索引? 11. 给出两种相关约束? 12. 如何在不影响子表的前提下,重建一个母...
truncate 和 delete 命令的区别 truncate 和 delete 命令都可以用来删除表中所有的记录。区别在于:truncate 是 DDL 操作,它移动 HWK,不需要 rollback segment。而 Delete 是 DML 操作,需要 rollback segment 且...
* truncate和delete命令的区别:truncate是DDL操作,不需要rollback segment,而delete是DML操作,需要rollback segment且花费较长时间。 七、其他 * 两种检查表结构的方法:DESCRIBE命令和DBMS_METADATA.GET_DDL...
下面是 Oracle DBA 面试题解析,涵盖了数据库管理、索引、分区表、物理文件、SGA、DECODE 函数、DELETE 和 TRUNCATE 的区别、事务管理等多方面的知识点。 一、数据库管理 * 表空间管理方式有哪几种?数据字典管理...
本文档将详细介绍与ZenCart相关的几个重要SQL命令及其应用场景,帮助开发者更好地理解和应用这些SQL命令。 #### 二、更新订单ID示例 在实际操作过程中,可能会遇到需要更改某个订单ID的情况。例如,当一个错误的...
索引的使用需要注意以下几点: * 索引的建立需要根据实际情况选择合适的索引类型。 * 索引的维护需要定期对索引进行重建和优化。 * 索引的使用需要避免对索引进行频繁的插入和删除操作。 CHAR和VARCHAR CHAR和...