- 浏览: 184496 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wsdst497:
chrome 版本号39 新窗口还是会被屏蔽
超链接实现新窗口打开很容易 -
zhanyeting:
[b][/b]
ajax 页面无刷新更改数据库中的内容 -
ewf_momo:
...
STRUTS 2 -
gaoxingang2008:
排一下版 太乱了
javascript -
javsky:
经验值得借鉴,项目还是不错的~我们公司最近也在做相关的项目,物 ...
IT个人年终工作总结[1]
truncate,delete区别 truncate table命令将快速删除数据表中的任何记录,但保留数据表结构。这种快速删除和delete from 数据表的删除全部数据表记录不相同,delete命令删除的数据将存储在系统回滚段中,需要的时候,数据能够回滚恢复,而truncate命令删除的数据是不能够恢复的。 truncate操作 同没有where条件的delete操作十分相似 1、无论truncate大表还是小表速度都非常快。delete要产生回滚信息来满足回滚需求,而truncate是不产生的。 2、truncate是DDL语句进行隐式提交,不能进行回滚操作 3、truncate重新设定表和索引的HWM(高水标记),由于全表扫描和索引快速扫描都要读取所有的数据块知道HWM为止,所以全表扫描的性能不会因为delete而提高,但是经过truncate操作后速度会很快 4、truncate不触发任何delete触发器 5、不能赋给某个用户truncate其它用户表的权限。如果需要trucate其它用户表的权限必须对该用户赋DROP ANY TABLE权限 6、当表被truncate后,这个表和索引所占用的空间会恢复到初始大小,而delete操作不会减少表或索引所占用的空间。 7、不能truncate一个带有外键的表,如果要删除首先要取消外键,然后再删除。 truncate与delete的区别 truncate table命令将快速删除数据表中的所有记录,但保留数据表结构。这种快速删除与delete from 数据表的删除全部数据表记录不一样,delete命令删除的数据将存储在系统回滚段中,需要的时候,数据可以回滚恢复,而truncate命令删除的数据是不可以恢复的 可以做一个测试 建一个带有自增字段的表,加入100万数据 然后分别用TRUNCATE和DELETE删除全部数据 然后再向表里插入一条数据 最直观是: 1.TRUNCATE TABLE是非常快的 2.TRUNCATE之后的自增字段从头开始计数了,而DELETE的仍保留原来的最大数值 ……………………………………………………………………………………………… 注意:这里说的delete是指不带where子句的delete语句 相同点 truncate和不带where子句的delete, 以及drop都会删除表内的数据 不同点: 1. truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态. 2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger. 3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动 显然drop语句将表所占用的空间全部释放 truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始). 4.速度,一般来说: drop>; truncate >; delete 5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及 使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大. 想删除表,当然用drop 想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete. 如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据 语句实例: truncate table wap_cms_cp_user 数据删除 delete、drop、truncate 相同点: truncate和不带where子句的delete, 以及drop都会删除表内的数据 不同点: 1. truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态. 2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger. 3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动 显然drop语句将表所占用的空间全部释放 truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始). 4.速度,一般来说: drop>; truncate >; delete 5.安全性:小心使用drop 和truncate,尤其没有备份的时候. 使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大. 想删除表,当然用drop 想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete. 如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据 6.使用方法:drop table tablename,delete from tablename,truncate table tablename 总结: 1、delete和truncate只删除表中数据,而drop删除表 2、速度上drop>; truncate >; delete 3、drop和truncate无备份,delete有备份可回滚 关于oracle使用delete删除的问题 问题: 在oracle里,使用delete删除数据以后,数据库的存储容量不会减少,而且使用delete删除某个表的数据以后,查询这张表的速度和删除之前一样,不会发生变化。 原因: 因为oralce有一个HWM高水位,它是oracle的一个表使用空间最高水位线。当插入了数据以后,高水位线就会上涨,但是如果你采用delete语句删除数据的话,数据虽然被删除了,但是高水位线却没有降低,还是你刚才删除数据以前那么高的水位。除非使用truncate删除数据。那么,这条高水位线在日常的增删操作中只会上涨,不会下跌,所以数据库容量也只会上升,不会下降。而使用select语句查询数据时,数据库会扫描高水位线以下的数据块,因为高水位线没有变化,所以扫描的时间不会减少,所以才会出现使用delete删除数据以后,查询的速度还是和delete以前一样。 解决方案: 1.首先导出表,然后truncate这张表,最后导入这张表。 2.在存储空间当中移动表,但是由于rowid会被打乱,所以需要重建索引. 3.如果是oracle 10g.可是直接更新表的高水位线。 对应的SQL: 9i中: create table aa_bak as select * from aa where record_time > sysdate - 10; truncate table aa; insert into aa select * from aa_bak; drop table aa_bak; 10g 版本 alter tablename enable row movement; alter tablename shrink space;
发表评论
-
Oracle 10g创建表空间的完整步骤详解
2014-06-25 20:06 703Oracle 10g数据库中,当在数据库中创建用户时,基于 ... -
查询是否有重复
2014-06-15 10:20 580select t.id, count(t.id) as n ... -
查询oracle表的信息(表,字段,约束,索引)
2014-05-12 15:41 813查询oracle表的信息(表,字段,约束,索引)1、查询出所有 ... -
oracle
2014-03-18 09:33 5331、 Broken()过程更新一个已提交的工作的状态,典型地是 ... -
oracle ORA-01033错误的解决方案
2014-02-23 22:09 804oracle ORA-01033错误的解决方 ... -
sql loader(sqlldr)的用法
2012-09-19 10:48 2620sql loader可以把一些以文 ... -
Oracle ORA-01555 快照过旧 说明 .
2012-09-19 10:37 1191http://blog.csdn.net/tianlesoft ... -
Oracle 绑定变量
2012-09-18 17:58 782oracle 中,对于一个提交的sql语句,存在两种可选的解析 ... -
Oracle ADDM 自动诊断监视工具 介绍
2012-09-18 17:28 3561Oracle AWR 介绍(AWR -- Automatic ... -
Oracle undo 表空间管理 .
2012-09-18 14:47 10375Oracle 的Undo有两种方式: 一是使用undo 表空间 ... -
Oracle undo 管理
2012-09-18 11:14 1242在开始之前,我们先来 ... -
RedoLog Checkpoint 和 SCN关系
2012-09-17 11:04 2043一. Redo log ... -
ORA-24324:未初始化服务句柄,不允许此值,正在关闭 - 不允许连接
2012-09-17 10:02 1207ORA-24324:未初始化服 ... -
spool常用的设置
2012-09-11 15:57 1206spool常用的设置set colsep' '; //域 ... -
Oracle DUPLICATE复制数据库
2012-09-08 13:05 1219一、DUPLICATE复制数据库1.使用duplicate命令 ... -
rman各种故障背景下的恢复方法
2012-08-07 18:11 966各种故障背景下的恢复方法 丢失或损 ... -
RMAN-03009: backup 命令 (ORA_DISK_1 通道上, (
2012-08-06 15:44 13324RMAN-03009: backu RMAN> b ... -
RMAN部分命令
2012-08-03 17:26 9351、切换服务器归档模式,如果已经是归档模式可跳过此步:%sql ... -
Oracle SQL性能优化
2012-07-20 16:03 704(1) 选择最有效率的表名顺序(只在基于规则的优化器 ... -
Oracle Undo的学习
2012-07-20 13:36 795回滚段可以说是用来保持数据变化前映象而提供一致读和保障事务完 ...
相关推荐
详细阐述了Oracle中三种删除的方式truncate,drop和delete三者的区别和联系.
### truncate, delete 以及 drop 区别汇总 #### 一、概述 在数据库管理中,经常需要对数据表进行各种操作,比如删除表中的数据、删除整个表等。`truncate`, `delete` 和 `drop` 是三种常见的 SQL 命令,它们在功能...
### SQL之TRUNCATE、DELETE与DROP的区别 #### 概述 在SQL中,`TRUNCATE`、`DELETE`和`DROP`都是用于管理数据库表的重要命令,但它们之间存在显著的区别。本文将深入探讨这三种命令的功能、用法及其应用场景。 ####...
在SQL语言中,`TRUNCATE`、`DELETE` 和 `DROP` 是三个非常重要的数据操作语句,它们各自有着不同的用途和特性。理解这些差异对于数据库管理至关重要,特别是对于数据安全性和性能优化方面。 首先,`TRUNCATE` 语句...
### Truncate, Delete, Drop 的异同点 在数据库管理中,`TRUNCATE`, `DELETE`, 和 `DROP` 是三种常见的数据操作语言(DML)与数据定义语言(DDL)。这三种命令都有助于管理和调整数据库表结构及其中的数据,但它们...
### 数据库中truncate、delete与drop语句的深入解析 #### 一、基本概念与应用场景 在数据库管理中,`truncate`、`delete`与`drop`是三种常见的SQL语句,它们各自拥有不同的功能与用途,对于初学者来说,区分这三种...
### delete,truncate和drop的区别详解 #### 一、概述 在数据库管理中,经常会遇到需要删除数据或表的情况。为了确保数据的准确性和安全性,理解`delete`、`truncate`和`drop`这三个命令的区别至关重要。本文将详细...
最后,如果你想完全删除表及其定义,应当使用 DROP TABLE 语句,而不是 TRUNCATE 或 DELETE,因为后者仅删除表中的数据,保留表结构。 综上所述,TRUNCATE TABLE 和 DELETE 在性能、资源消耗和行为特性上都有明显的...
本文主要讲mysql中三种删除表的操作,delete语句、truncate语句以及drop语句的区别: 简介 delete 1、删除整张表的数据: delete from table_name; 2、删除部分数据,添加where子句: delete from table_name ...
前言 上周同事小姐姐问我:“哈哥你看,我发现...咱们常用的三种删除方式:通过 delete、truncate、drop 关键字进行删除;这三种都可以用来删除数据,但场景不同。 一、从执行速度上来说 drop > truncate >> DELETE 二
`DROP`、`TRUNCATE`和`DELETE`是SQL中用于删除数据的三个关键命令,它们各自有不同的特性和应用场景。以下是它们的详细对比和解释: 1. **DELETE语句**: DELETE是一种数据操纵语言(DML),这意味着它涉及到对...
您可能感兴趣的文章:数据库中删除语句Drop、Delete、Truncate的相同点和不同点的比较(实例说明)drop,truncate与delete的区别详解MySQL中DROP,TRUNCATE 和DELETE的区别实现mysql从零开始浅析drop user与delete from ...
注意:这里说的delete是指不带where子句的delete语句 相同点 truncate和不带where子句的delete, 以及drop都会删除表内的数据 不同点: 1. truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被...
SQL语句中----删除表数据drop、truncate和delete的用法,对你爱不完
drop、delete、truncate都表示删除,但是三者有一些差别: Delete用来删除表的全部或者一部分数据行,执行delete之后,用户需要提交(commmit)或者回滚(rollback)来执行删除或者撤销删除。会触发这个表上所有的...