oracle数据库删除数据Delete语句和Truncate语句的使用比较_oracle

当表中的数据不需要时,则应该删除该数据并释放所占用的空间,删除表中的数据可以使用Delete语句或者Truncate语句,下面分别介绍。

一、delete语句

(1)有条件删除

语法格式:delete [from] table_name [where condition];

如:删除users表中的userid为‘001'的数据:delete from users where userid='001';

(2)无条件删除整个表数据

语法格式:delete table_name;

如:删除user表中的所有数据:delete users ;

二、Truncate语句

使用Truncate语句是删除表中的所有记录。

语法格式: Truncate [table] table_name;

(1)删除所有记录不保留记录占用空间

Truncate [table] table_name [drop storage];

如:删除users表中的所有数据并不保存占用空间: Truncate table users drop storage; 由于默认使用drop storage关键字,所以可以省略 drop storage;
(2)删除所有记录保留记录占用空间

Truncate [table] table_name [reuse storage];

如:删除users表中的所有数据并保存占用空间: Truncate table users reuse storage;

三、两种删除语句的对比

由于delete语句删除记录时候,记录是逐条删除的,而Truncate 语句删除数据时不产生回退信息;所以如果需要删除大量数据的时候使用delete则占用较多的系统资源,而如果使用Truncate 则会快的多。

下面通过实例说明一下:

1、首先建立user表:

create table users
(
userid varchar2(20) ,
username varchar2(30),
userpass varchar2(30)
);复制代码

2、接着插入一条数据

insert into users values('001','GavinDream','123456'); 3、使用复制插入方法插入几万条数据

insert into users(userid,username,userpass) select * from users;我插入了 4194304条数据,使用delete删除花费时间为:90.964 seconds,然后又插入了二倍的数据,但使用truncate花费时间仅仅为2.215 seconds,如下图所示:

时间: 2024-10-01 12:43:46

oracle数据库删除数据Delete语句和Truncate语句的使用比较_oracle的相关文章

c#-C#中数据库删除按钮中在下面update语句中显示数据库查询过于复杂

问题描述 C#中数据库删除按钮中在下面update语句中显示数据库查询过于复杂 string connstr = "Provider=Microsoft.Jet.OleDb.4.0;"; connstr += @"Data Source=GEARCNC.mdb"; OleDbConnection tempconn = null; try { if (MessageBox.Show("确定删除这一项吗?", "confirm Messag

h2 删数据 sql优化-h2数据库删除数据速度问题

问题描述 h2数据库删除数据速度问题 想删除h2数据库中某个表部分数据,但该表中有八千万左右数据,如何删除符合要求的一小部分数据呢?比如删除name以abc开头的数据,因为h2数据库我是通过web打开查看的,普通的Sql语句要执行很长很长时间,而且经常报内存不足,各位大神有没有什么优化的方法???求指点呀 解决方案 http://www.lc365.net/blog/b/32424/ 解决方案二: 因为没分了,不过谢谢能回答,对我其他的一些地方有帮助

删除表-oracle数据库删除所有表的问题

问题描述 oracle数据库删除所有表的问题 在oracle数据库中如何用sql语句删除该数据库中的所有表,drop一条一条的来很费力的,700多条,删完估计要到明年了,哪位大仙给个法门? 解决方案 那还不如删掉那个数据库再重建一个数据库 解决方案二: 恩,把数据库删了重新建立一个吧,所有表,一个一个的删的确有点辛苦哈,楼主 解决方案三: select 'drop table ' || TABLE_NAME || ';' from all_tab_comments where owner='用户

oracle数据库删除所有表的问题

问题描述 oracle数据库删除所有表的问题 删除一个数据库中的所有表,我的数据库中一共将近700条table,一条一条的删,太慢了,如何用.sql脚本文件,删除所有表? 解决方案 sql文件就是每一个删除表的语句放到一行,然后执行SQL文件. 解决方案二: 你的意思时手工一句句输入麻烦? 先用下面的结果生成一个脚本,再执行脚本. select 'DROP TABLE '+TABLE_NAME+';' from user_tables 解决方案三: 二楼正解.如果删除表麻烦,就先drop表再重新

SQL Server数据库删除数据集中重复数据实例讲解_MsSql

SQL Server数据库操作中,有时对于表中的结果集,满足一定规则我们则认为是重复数据,而这些重复数据需要删除.如何删除呢?本文我们通过一个例子来加以说明. 例子如下: 如下只要companyName,invoiceNumber,customerNumber三者都相同,我们则认为是重复数据,下面的例子演示了如何删除. declare @InvoiceListMaster table ( ID int identity primary key , companyName Nchar(20), i

SQL Server数据库删除数据集中重复数据实例讲解

SQL Server数据库操作中,有时对于表中的结果集,满足一定规则我们则认为是重复数据,而这些重复数据需要删除.如何删除呢?本文我们通过一个例子来加以说明. 例子如下: 如下只要companyName,invoiceNumber,customerNumber三者都相同,我们则认为是重复数据,下面的例子演示了如何删除. declare @InvoiceListMaster table ( ID int identity primary key , companyName Nchar(20), i

winform中用datagirdview给oracle数据库添加数据怎么得到没有提那家成功的值

问题描述 winform中用datagirdview给oracle数据库添加数据怎么得到没有成功的值,并且在一个新的datgirdview中显示,麻烦说详细点 解决方案 解决方案二:意思就是一个个form中有两个datagirdview,其中一个要显示没有添加成功的值,怎么才能得到没有添加成功的值解决方案三:可以创建一个DataTabledtFail=newDataTale(); 在执行插入操作时,插入失败的添加到dtFail把dtFail作为新的DataGridView的数据源

从SQL Server数据库转到Oracle数据库的数据脚本处理

在我们很多情况下的开发,为了方便或者通用性的考虑,都首先考虑SQL Server数据库进行开发,但有时候客户的生产环境是Oracle或者其他数据库,那么我们就需要把对应的数据结构和数据脚本转换为对应的数据库,数据结构一般来说,语法都遵循了SQL92的标准,或者我们根据不同的PowerDesigner文件进行生成对应的结构脚本即可,但是实际数据的脚本我们就需要进行一定的处理,以及文本的替换处理了,本文结合Notepad++的文本正则表达式替换,实现一些如日期较为特殊的数据脚本调整,把它从SQL S

MySQL删除数据Delete与Truncate语句使用比较_Mysql

空mysqll表内容常见的有两种方法:一种delete,一种是truncate . 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内容.效率上truncate比delete快,但truncate删除后不记录mysql日志,不可以恢复数据. 其语法结构为: 复制代码 代码如下: TRUNCATE [TABLE] tbl_name 这里简单的给出个示例, 我想删除 friends 表中所有的记录,可以使用如下语句: 复