(转自:http://roujiaweize.spaces.live.com/Blog/cns!9745F14B4AEB3B72!1276.entry)
1. delete/truncate 只删除数据不删除表,索引的结构。 drop 将删除表的结构被依赖的 index/constrain/trigger,依赖于该表的 procedure/function 将保留,但是变为 invalid 状态;
2. delete 是 dml,写 rollback segement,可回滚,速度慢,事务提交之后才生效。在 9i 满足 undo_retention 条件下可使用 flashback。一次性大批量数据的 delete 可能导致回滚段急剧扩展从而影响到数据库,慎用。触发 trigger。 truncate/drop 是 ddl,隐式提交,不写 rollback segment,不能回滚,速度快。9i 不能使用 flashback。不触发 trigger;
3. delete 不影响表所占用的 extent,HWM 保持原位置不动,即使删除的是最靠近 HWM 的数据。delete 其实也可以释放空间,但是不降低 HWM,delete 后 block 的空闲空间达到 pct_used,就可以重用。 truncate 缺省情况下将空间(表和索引)释放到 minextents 个 extent,除非使用 reuse storage。truncate 会将高水线复位(回到最开始)。 drop 将表所占用的空间全部释放,segment 不存在,无所谓 HWM 的概念;
4. truncate/drop 的对象必须是本模式下的,或者被授予 drop any table 的权限,但 drop any table 权限不能 truncate/drop sys 的表。 delete 的对象必须是本模式下的,或者被授予 delete on SCHEMA.table 或 delete any table 的权限,但 delete any table 权限不能 delete sys 的表;
5. 不能 truncate 一个带有 enable 外键的表,不管表里有没有数据,如果要 truncate,首先要 disable 外键或者删除外键(drop 外键的表肯定是删除了外键)。不能 drop 一个带有 enable 外键的表,不管表里有没有数据,如果要 drop,首先要删除外键,或者直接用 drop table TABLE_NAME cascade constraints; 级联删除外键。 delete 可以。
(http://roujiaweize.spaces.live.com/Blog/cns!9745F14B4AEB3B72!1276.entry)
分享到:
相关推荐
### delete,truncate和drop的区别详解 #### 一、概述 在数据库管理中,经常会遇到需要删除数据或表的情况。为了确保数据的准确性和安全性,理解`delete`、`truncate`和`drop`这三个命令的区别至关重要。本文将详细...
详细阐述了Oracle中三种删除的方式truncate,drop和delete三者的区别和联系.
为了应对这类问题,可以通过创建Oracle系统触发器来实现对`DROP TABLE`和`TRUNCATE TABLE`命令的监控与阻止。以下详细介绍两种不同的Oracle版本(10g和8i)下如何创建相应的系统触发器。 ### Oracle 10g环境下的...
Oracle 数据库删除数据 Delete 语句和 Truncate 语句的对比 Delete 语句和 Truncate 语句是 Oracle 数据库中两种常用的删除数据的方法,但是它们之间存在着明显的差异。 一、Delete 语句 Delete 语句是一种 DML...
然而,Oracle不支持直接为用户授予针对单个表的`TRUNCATE`权限,而是通常将更广泛的`DROP ANY TABLE`权限赋予用户,但这可能会带来安全隐患。本文将探讨两种实现为用户授权`TRUNCATE TABLE`的方案,以确保安全性和可...
在Oracle数据库中,删除表中数据有两种主要方式:Delete语句和Truncate语句。两者在功能上相似,但有着显著的区别,适用于不同的场景。 **Delete语句** Delete语句是一种灵活的数据删除方式,它可以有条件地删除...
SQL语句中----删除表数据drop、truncate和delete的用法,对你爱不完
根据提供的文件信息,本文将详细解释Oracle数据库中的删除操作,包括DELETE、DROP以及TRUNCATE三个主要命令。这些命令在数据库管理中极为重要,能够帮助我们有效地管理数据表中的记录或整个表结构。 ### Oracle删除...
与`DELETE`命令不同的是,`TRUNCATE`不触发任何触发器也不记录回滚信息,因此执行速度更快。具体来说,`TRUNCATE`操作的原理在于它**并不会逐个清除用户数据块上的数据**,而是**仅重置数据字典和元数据块上的元数据...
truncate 方法不同于 delete 方法,它会直接清空表中的所有数据,无法使用闪回方法恢复数据。因此,在使用 truncate 方法时,需要特别小心。 数据库闪回 Oracle 的闪回功能除了以上基本功能外,还可以闪回整个...
SELECT 'TRUNCATE TABLE ' || TBNAME || ' DROP STORAGE;' FROM UNIT_TABLES WHERE LX = 'DEL'; ``` 8. **回收未使用空间**:使用ALTER命令回收表和索引未使用的空间。 ```sql SELECT 'ALTER TABLE ' || TBNAME...
- 虽然大多数关系型数据库管理系统(RDBMS)如 Oracle、MySQL、SQL Server 和 PostgreSQL 都提供了 `DELETE` 和 `TRUNCATE` 功能,但具体实现可能会有些许差异。例如,Oracle 需要特定权限才能执行 `TRUNCATE TABLE...
- **注意事项**:如果确实需要删除表中的所有数据并释放空间,但又希望保留恢复的可能性,可以考虑使用`DELETE`命令而非`TRUNCATE`。 #### 四、闪回整个数据库 **1. 原理** 除了闪回表之外,Oracle还提供了闪回...
与DELETE命令不同的是,TRUNCATE操作不记录任何日志,因此执行速度更快,但也不能回滚。对于分区表而言,可以针对单个分区使用TRUNCATE命令来清除该分区中的所有数据。 **示例命令**: ```sql ALTER TABLE mdc_...
在执行DROP或DELETE操作后,Oracle并不会自动回收表所占用的空间,这可能会导致磁盘空间浪费。为了释放这些空间,可以采取以下两种方式之一: 1. **使用TRUNCATE**:该命令会直接清空表中的所有数据,并且不可恢复...
与`DELETE`不同,`TRUNCATE`不记录任何删除操作,因此速度更快,但同样不可逆。若需删除表而保留其结构,可以使用`TRUNCATE TABLE`后再`DROP TABLE`。 在实际操作中,可能需要编写PL/SQL程序或脚本来自动化这些过程...
**Truncate、Delete(不带WHERE子句的DELETE语句)、Drop的异同:** **相同点:** - `TRUNCATE`、不带`WHERE`子句的`DELETE`以及`DROP`都会删除表内的数据。 **不同点:** 1. **数据与表结构:** - `TRUNCATE`和`...