Oracle 中truncate与delete的区别 收藏
truncate是oracle中独有的关键字吧!它的作用是清空一个表格,在删除数据方面,其与delete有一些区别,以便自己记住:
1、在功能上,truncate是清空一个表的内容,它相当于delete from table_name。
2、delete是dml操作,truncate是ddl操作;因此,用delete删除整个表的数据时,会产生大量的roolback,占用很多的rollback segments, 而truncate不会。
3、在内存中,用delete删除数据,表空间中其被删除数据的表占用的空间还在,便于以后的使用,另外它是“假相”的删除,相当于windows中用delete删除数据是把数据放到回收站中,还可以恢复,当然如果这个时候重新启动系统(OS或者RDBMS),它也就不能恢复了!
而用truncate清除数据,内存中表空间中其被删除数据的表占用的空间会被立即释放,相当于windows中用shift+delete删除数据,不能够恢复!
4、truncate 调整high water mark 而delete不;truncate之后,TABLE的HWM退回到 INITIAL和NEXT的位置(默认)delete 则不可以。
5、truncate 只能对TABLE,delete 可以是table,view,synonym。
6、TRUNCATE TABLE 的对象必须是本模式下的,或者有drop any table的权限 而 DELETE 则是对象必须是本模式下的,或被授予 DELETE ON SCHEMA.TABLE 或DELETE ANY TABLE的权限。
7、在外层中,truncate或者delete后,其占用的空间都将释放。
8、truncate和delete只删除数据,而drop则删除整个表(结构和数据)。
delete 用法
Oracle Delete Statements
Version 10.2
Basic Delete Statements
1.Delete All Rows: DELETE <table_name>
or
DELETE FROM <table_name>;
CREATE TABLE t AS
SELECT *
FROM all_tables;
SELECT COUNT(*)
FROM t;
DELETE FROM t;
COMMIT;
SELECT COUNT(*)
FROM t;
2.Delete Selective Rows
DELETE FROM <table_name>
WHERE <condition>;
CREATE TABLE t AS
SELECT *
FROM all_tables;
SELECT COUNT(*)
FROM t;
DELETE FROM t
WHERE table_name LIKE '%MAP';
COMMIT;
SELECT COUNT(*)
FROM t;
3.Delete From A SELECT Statement
DELETE FROM (<SELECT Statement>);
CREATE TABLE t AS
SELECT *
FROM all_tables;
SELECT COUNT(*)
FROM t;
DELETE FROM (
SELECT * FROM t WHERE table_name LIKE '%MAP');
SELECT COUNT(*)
FROM t;
4.Delete With Returning Clause
DELETE FROM (<SELECT Statement>);
CREATE TABLE t AS
SELECT *
FROM all_tables;
set serveroutput on
DECLARE
r urowid;
BEGIN
DELETE FROM t
WHERE rownum = 1
RETURNING rowid INTO r;
dbms_output.put_line(r);
END;
/
5.Delete Restricted To A Partition
DELETE FROM <table_name>
PARTITION <partition_name>;
DELETE FROM sales PARTITION (q1_2001_invoices);
Delete From A Remote Database DELETE FROM <table_name>@<database_link>
DELETE FROM t@remote_db;
在删除大数据量时(一个表中大部分数据时),
方法:
1、先将不需要删除的数据复制到一个临时表中
2、trunc table 表
3、将不需要删除的数据复制回来。
delete只循环了一次,(去查并删)
游标循环了二次,(先查出来,再循环一次删)
truncate是oracle中独有的关键字吧!它的作用是清空一个表格,在删除数据方面,其与delete有一些区别,以便自己记住:
1、在功能上,truncate是清空一个表的内容,它相当于delete from table_name。
2、delete是dml操作,truncate是ddl操作;因此,用delete删除整个表的数据时,会产生大量的roolback,占用很多的rollback segments, 而truncate不会。
3、在内存中,用delete删除数据,表空间中其被删除数据的表占用的空间还在,便于以后的使用,另外它是“假相”的删除,相当于windows中用delete删除数据是把数据放到回收站中,还可以恢复,当然如果这个时候重新启动系统(OS或者RDBMS),它也就不能恢复了!
而用truncate清除数据,内存中表空间中其被删除数据的表占用的空间会被立即释放,相当于windows中用shift+delete删除数据,不能够恢复!
4、truncate 调整high water mark 而delete不;truncate之后,TABLE的HWM退回到 INITIAL和NEXT的位置(默认)delete 则不可以。
5、truncate 只能对TABLE,delete 可以是table,view,synonym。
6、TRUNCATE TABLE 的对象必须是本模式下的,或者有drop any table的权限 而 DELETE 则是对象必须是本模式下的,或被授予 DELETE ON SCHEMA.TABLE 或DELETE ANY TABLE的权限。
7、在外层中,truncate或者delete后,其占用的空间都将释放。
8、truncate和delete只删除数据,而drop则删除整个表(结构和数据)。
delete 用法
Oracle Delete Statements
Version 10.2
Basic Delete Statements
1.Delete All Rows: DELETE <table_name>
or
DELETE FROM <table_name>;
CREATE TABLE t AS
SELECT *
FROM all_tables;
SELECT COUNT(*)
FROM t;
DELETE FROM t;
COMMIT;
SELECT COUNT(*)
FROM t;
2.Delete Selective Rows
DELETE FROM <table_name>
WHERE <condition>;
CREATE TABLE t AS
SELECT *
FROM all_tables;
SELECT COUNT(*)
FROM t;
DELETE FROM t
WHERE table_name LIKE '%MAP';
COMMIT;
SELECT COUNT(*)
FROM t;
3.Delete From A SELECT Statement
DELETE FROM (<SELECT Statement>);
CREATE TABLE t AS
SELECT *
FROM all_tables;
SELECT COUNT(*)
FROM t;
DELETE FROM (
SELECT * FROM t WHERE table_name LIKE '%MAP');
SELECT COUNT(*)
FROM t;
4.Delete With Returning Clause
DELETE FROM (<SELECT Statement>);
CREATE TABLE t AS
SELECT *
FROM all_tables;
set serveroutput on
DECLARE
r urowid;
BEGIN
DELETE FROM t
WHERE rownum = 1
RETURNING rowid INTO r;
dbms_output.put_line(r);
END;
/
5.Delete Restricted To A Partition
DELETE FROM <table_name>
PARTITION <partition_name>;
DELETE FROM sales PARTITION (q1_2001_invoices);
Delete From A Remote Database DELETE FROM <table_name>@<database_link>
DELETE FROM t@remote_db;
在删除大数据量时(一个表中大部分数据时),
方法:
1、先将不需要删除的数据复制到一个临时表中
2、trunc table 表
3、将不需要删除的数据复制回来。
delete只循环了一次,(去查并删)
游标循环了二次,(先查出来,再循环一次删)
发表评论
-
Oracle特别函数---First_Value
2009-11-10 14:09 1855FIRST_VALUE 功能描述:返回组中数据窗口的第一个值。 ... -
oracle定时删除表空间的数据并释放表空间
2009-10-13 16:53 2614这两天我一个朋友问我 ... -
oracle定时任务(dbms_job)
2009-10-13 16:50 2300今天总结下oracle的任务队列管理器(job queue ) ... -
Decode函数的语法
2009-10-13 16:47 988Decode函数的语法结构如下: decode (expre ... -
数据库---存储过程总结
2009-10-13 16:20 946定义: ... -
oracle执行计划的理解
2009-10-13 16:12 736执行计划的理解 计信息 ------------------ ... -
oracle定时添加或删除分区表的分区
2009-10-13 16:11 2081这几天,根据业务的需求和性能的考虑,需要定时删除历史数据,表里 ... -
Oracle常用数据字典表
2009-09-16 09:00 1106查看当前用户的缺省表空间 SQL>select us ... -
关于SQL中的“\”的转义
2009-05-30 08:23 947select ename from myemp where e ... -
Oracle存储过程学习(2)
2009-05-11 08:05 1145存储过程创建语法: create or rep ... -
ora-12154 TNS:"无法处理服务名"的一个解决方法
2009-04-13 15:48 1449很怪异的一个问题,在网络环境下配置客户端,竟然怎么也连不上主机 ... -
触发器
2009-02-10 20:27 1017触发器 触发器是指被隐含执行的存储过程,当发生特定事件(例如修 ... -
Oracle 包
2009-02-06 20:08 1205包 包用于逻辑组合相关的PL/SQL类型、项、子程序,它由包 ... -
函数的纯度级别以及使用
2009-02-05 16:09 942函数的纯度级别以及使用 - 定义由函数读取或修改的数据种类。 ... -
管理存储过程和函数
2009-02-05 10:47 743管理存储过程和函数 1.列出当前用户的子程序 SQL>c ... -
Oracle 自定义函数
2009-02-04 14:49 3621函数 函数用于返回特定数据。执行时得找一个变量接收函数的返回值 ... -
Oracle存储过程
2009-02-04 11:05 1044Oracle存储过程 存储过程不仅可以简化客户端应用程序的开发 ... -
PL/SQL DEVELOPER 基本用法详解
2009-02-03 10:37 2369一.编辑表数据(浏览表 ... -
游标(二)
2009-02-02 16:14 824游标FOR循环 游标FOR循环是游标使用的最简单的方式,当使用 ... -
游标(一)
2009-02-01 15:28 812使用游标 当在pl/sql块中 ...
相关推荐
在Oracle数据库中,`TRUNCATE TABLE`是一个用于删除表中所有数据的命令,它与`DELETE`语句不同,不记录任何删除操作,并且在大多数情况下执行速度更快。然而,一旦执行`TRUNCATE TABLE`,数据通常无法通过常规的...
在Oracle数据库中,`TRUNCATE TABLE`命令用于删除表中的所有数据,但它与`DELETE`语句有所不同。`TRUNCATE`操作是DDL(Data Definition Language)的一部分,而`DELETE`是DML(Data Manipulation Language)。由于`...
Delete 语句和 Truncate 语句是 Oracle 数据库中两种常用的删除数据的方法,但是它们之间存在着明显的差异。 一、Delete 语句 Delete 语句是一种 DML(Data Manipulation Language)语句,用于删除表中的数据。 ...
在Oracle数据库管理中,删除数据是一项常见的操作,通常有两种主要的方式:Delete语句和Truncate语句。这两种语句在功能上相似,都是用来移除表中的数据,但在执行效率和资源消耗上存在显著差异。 一、Delete语句 ...
详细阐述了Oracle中三种删除的方式truncate,drop和delete三者的区别和联系.
在Oracle数据库管理中,有时需要为特定用户授权执行`TRUNCATE TABLE`操作,以便他们在自己的职责范围内能够清理数据而不影响其他用户。然而,Oracle不支持直接为用户授予针对单个表的`TRUNCATE`权限,而是通常将更...
在Oracle数据库中,`TRUNCATE TABLE`语句用于删除表中的所有行,其执行速度远快于使用`DELETE`语句。这是因为`TRUNCATE`会删除表的数据段并重置表的高水位线(High Water Mark, HWM),而不会记录每一行的删除动作到...
SQL语句中----删除表数据drop、truncate和delete的用法,对你爱不完
与`DELETE`语句不同,`TRUNCATE`不记录任何删除操作,因此无法通过常规的事务回滚来恢复数据。然而,Oracle提供了一些高级恢复功能,如闪回技术,可以在特定条件下恢复被`TRUNCATE`删除的数据。 1. **闪回功能**: ...
在Oracle数据库中,删除表中数据有两种主要方式:Delete语句和Truncate语句。两者在功能上相似,但有着显著的区别,适用于不同的场景。 **Delete语句** Delete语句是一种灵活的数据删除方式,它可以有条件地删除...
在Oracle数据库中,`TRUNCATE TABLE`是一个用于删除表中所有数据的命令,与`DELETE`语句不同,`TRUNCATE`不记录任何删除操作,因此它不能通过闪回查询(Flashback Query)来恢复。当你执行`TRUNCATE TABLE`后,数据...
为了应对这类问题,可以通过创建Oracle系统触发器来实现对`DROP TABLE`和`TRUNCATE TABLE`命令的监控与阻止。以下详细介绍两种不同的Oracle版本(10g和8i)下如何创建相应的系统触发器。 ### Oracle 10g环境下的...
尽管`drop`、`truncate`和`delete`都是DDL或DML操作,但在Oracle中,仍有可能恢复已删除的数据或表: - **drop操作**:如果Oracle的回收站功能被启用,则可以通过回收站恢复已删除的表。需要注意的是,这取决于表...
4. 数据库操作:在数据库管理中,"DELETE ALL"或"TRUNCATE TABLE"命令用于清空表中的所有记录,前者记录日志,可回滚,后者速度快但不可回滚。 5. 缓存与历史记录:在浏览器中,"Delete All"可以清除浏览历史、...
在解决问题之前,首先需要使用 delete 语句删除大量数据,然后使用 truncate table 语句清空表空间。接着,使用 analyze table 语句重新分析表的统计信息,以便提高查询效率。 analyze 语句的作用是收集表的统计...