ORACLE truncate
时间: 2025-03-11 09:06:43 浏览: 36
### ORACLE 中 TRUNCATE 命令的用法
TRUNCATE 是一种用于快速删除表中所有数据的方法,其执行速度通常比 DELETE 语句更快。DELETE 会逐行处理记录并触发任何定义的触发器,而 TRUNCATE 则是通过重置高水位线(HWM)来实现高效的数据移除。
#### 特点
- **不可回滚**:一旦执行了 TRUNCATE 操作,则无法通过标准事务机制恢复被清除的数据[^2]。
- **不触发触发器**:与 DELETE 不同的是,在执行 TRUNCATE 的时候不会激活 ON DELETE CASCADE 或其他类型的触发器逻辑。
#### 使用语法
基本形式如下所示:
```sql
TRUNCATE TABLE table_name;
```
如果希望保留存储空间而不释放给数据库对象池,可以加上 `DROP STORAGE` 子句;如果不想要这样做则使用 `REUSE STORAGE`:
```sql
-- 清空表的同时回收分配的空间
TRUNCATE TABLE employees DROP STORAGE;
-- 只清空表中的数据但保持已有的空间分配不变
TRUNCATE TABLE employees REUSE STORAGE;
```
对于分区表来说,还可以指定只截断特定分区内数据:
```sql
ALTER TABLE sales PARTITION p_january TRUNCATE PARTITION;
```
需要注意的是,当涉及到外键约束时,默认情况下不允许直接对父级关系所在的表格应用此操作除非先禁用了相应的参照完整性规则或者采用CASCADE选项来自动解除子项关联后再做清理工作。
#### 实际案例演示
假设有一个名为 `test_table` 的测试表,其中包含大量历史订单信息不再需要保存。为了提高性能以及减少磁盘占用率可以选择执行下面这条SQL指令完成整个表内容的一次性彻底清除动作:
```sql
TRUNCATE TABLE test_table;
```
上述命令将会立即生效,并且由于没有日志记录所以效率非常高,但是也正因为如此才强调了谨慎使用的必要性——因为没有任何方式能够逆转这一过程所带来的影响。
阅读全文
相关推荐


















