Oracle truncate和delete的区别

首先truncate是DDL语句,而delete是DML语句。

truncate的删除比delete快很多,尤其是表数据量大的时候,原因是truncate执行过程中不产生undo,所以truncate也无法再回滚。而delete在commit之前肯定是可以回滚的。

truncate的另一个特性是会将表的高水位线重新归零,delete不会这样做,这也是truncate的一个优点,全表扫描仅搜索位于高水位线之下的存储块中的数据行。这对于全表扫描性能具有很大影响。

truncate有一个副作用,如果一张表定义了主键,并且这个主键是其子表的外键,那么不能truncate这张表,即使子表没有任何数据。这种情况下试图去truncate会报:OAR-02266。原因是truncate无法回滚,防止有人并发往子表插入数据。而delete是允许这样做的,因为delete会生成重做信息,具有读一致性,并且能够回滚。

最后还有一种删除全表数据的方式:drop表并且重建,这种情况一般不会在生产环境做,多用于开发测试阶段。

时间: 2024-12-19 19:23:58

Oracle truncate和delete的区别的相关文章

drop、truncate和delete的区别

drop.truncate和delete的区别 SQL DELETE 1.delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表空间要足够大,需要手动提交(commit)操作才能生效,可以通过rollback撤消操作 2.delete可根据条件删除表中满足条件的数据,如果不指定where子句,那么删除表中所有记录 3.delete语句不影响表所占用的extent,高水线(h

mysql中 drop、truncate和delete的区别

mysql中drop.truncate和delete的区别 (1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作. TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的.并且在删除的过程中不会激活与表有关的删除触发器.执行速度快. (2)表和索引所占空间. 当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小, DELETE操作不会减少表或索引

Oracle truncate、 delete、 drop区别

相同点: 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL语句(数据定义语言),执行后会自动提交. 不同点: 1. truncate 和 delete 只删除数据不删除表的结构(定义)drop 语句将删除表的结构被依赖的约束(constrain).触发器(trigger).索引(index):依赖于该表的存储过程/函数将保留,但是变为 invalid 状态. 2. delete 语句是数据库操作语言(dml),这个

sql server 中删除表中数据truncate和delete的区别(转载自.net学习网)

我们都知道truncate table可以用来删除整个表的内容,它与delete后面不跟where条件的效果是一样.但除此之外,我们还清楚它们之间有其它的区别吗?本章我们将一起讨论truncate与delete区别. 我们先看一下truncate table的说明:删除表中的所有行,而不记录单个行删除操作.TRUNCATE TABLE在功能上与没有WHERE子句的DELETE语句相同:但是,TRUNCATE TABLE速度更快,使用的系统资源和事务日志资源更少. truncate table的语

sql中drop、truncate和delete的区别

SQL truncate .delete与drop区别 相同点: 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL语句(数据定义语言),执行后会自动提交. 不同点: 1. truncate 和 delete 只删除数据不删除表的结构(定义) drop 语句将删除表的结构被依赖的约束(constrain).触发器(trigger).索引(index):依赖于该表的存储过程/函数将保留,但是变为 invalid 状态.

drop,truncate与delete的区别

注意:这里说的delete是指不带where子句的delete语句 相同点 truncate和不带where子句的delete, 以及drop都会删除表内的数据 不同点: 1. truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态. 2.delete语句是dml,这个操作会放到rollback segement中,

SQL关于删除的三个语句:DROP、TRUNCATE、 DELETE 的区别。

DROP: DROP TABLE test; 删除表test,并释放空间,将test删除的一干二净. TRUNCATE: TRUNCATE test; 删除表test里的内容,并释放空间,但不删除表的定义,表的结构还在. DELETE: 1.删除指定数据 删除表test中年龄等于30的且国家为US的数据 DELETE FROM test WHERE age=30 AND country='US'; 2.删除整个表 仅删除表test内的所有内容,保留表的定义,不释放空间. DELETE FROM

drop、truncate、delete的区别

1.drop table xx  作用:删除内容和定义,释放空间.简单来说就是把整个表去掉.以后要新增数据是不可能的,除非新增一个表. drop table test,就是把整个表 移除.里面的数据都消失 2.truncate table xx 作用:删除内容.释放空间但不删除定义.与drop不同的是,他只是清空表数据而已,不删除表结构. 3.delete table xx 作用:也是删除整个表的数据,系统一行一行地删,效率较truncate低, 或delete table tb where 条

DML -- 数据操纵预言: insert/delete/update --多表连接修改/.多表连接删除/多表连接查询-- truncate 和 delete的区别

/* DML -- 数据操纵预言: insert/delete/update */ #一: 插入语句 /* 语法1: insert into 表名(列名,..,列名....) values(值1,值2,...),(值1,值2,...),(值1,值2,...); 语法2: insert into 表名 set 列名1=值1,列名2=值2,....; */ /*二: 修改语句 1.修改单表的记录 语法: update 表名 set 列1=新值1,列2=新值2,列2=新值2... where 筛选条件