truncate,delete,drop的异同点
注意:这里说的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 and delete
1、TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令DELETE将被撤销,而TRUNCATE则不会被撤销。
2、TRUNCATE是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。
3、TRUNCATE将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比DELETE操作后的表要快得多。
4、TRUNCATE不能触发任何DELETE触发器。
5、不能授予任何人清空他人的表的权限。
6、当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。
7、不能清空父表。
分享到:
相关推荐
首先,从单个表中删除数据记录的语法是`DELETE FROM 表名 [WHERE 条件]`。如果省略了`WHERE`子句,将删除表中的所有行。例如,要删除`book`表中书名为"PHP网站制作"的记录,可以使用以下命令: ```sql DELETE FROM ...
在使用DELETE语句删除数据之前,你应该考虑使用SELECT语句来测试你的WHERE条件,确保它会匹配到你想要删除的记录。例如: SELECT * FROM Employee WHERE ID = '01' 在确认无误后,你可以执行DELETE语句来删除数据...
MySQL中的`DELETE`语句是用于从数据库中删除数据行的关键命令。在处理单个表时,`DELETE`语句的使用相对简单,而在多表环境中进行连接删除时,其复杂性和潜在影响则显著增加。这里我们将深入探讨`DELETE`语句的各种...
1. `DROP`会删除表及其依赖项,如索引、约束和触发器,而`TRUNCATE`和`DELETE`只删除数据。 2. `DELETE`是可回滚的DML操作,`TRUNCATE`和`DROP`是DDL(数据定义语言)操作,即时生效且不可回滚。 3. `DELETE`操作...
- **逻辑删除**:如果完全物理删除数据不可行,可以考虑逻辑删除的方式,即通过标记某些记录为已删除状态而不是真正地从数据库中移除它们。 - **优化查询性能**:针对查询频繁的表或字段,优化索引结构,减少查询...
这是因为`TRUNCATE`会删除表的数据段并重置表的高水位线(High Water Mark, HWM),而不会记录每一行的删除动作到回滚段(因此不支持回滚)。此外,`TRUNCATE`不会触发任何触发器,进一步提高了执行效率。 #### 二、...
方法一我常用的做法,就是在数据库中加一个删除标识字段,如: isdel=1 这样就代码... 您可能感兴趣的文章:mysql之delete删除记录后数据库大小不变mysql 删除操作(delete+TRUNCATE)mysql支持跨表delete删除多表记录MyS
### Oracle查询重复数据与删除重复记录方法 在Oracle数据库中,有时我们需要找出并处理重复的数据。这不仅可以提高数据质量,还能提升查询效率。本文将详细介绍几种常用的查询和删除Oracle数据库中重复记录的方法。...
3. 数据安全:在涉及敏感信息时,"Delete All"可能涉及到安全删除,即使用特殊软件如DBAN(Darik's Boot and Nuke)进行全盘数据销毁,确保信息无法被数据恢复工具找回,以保护隐私。 4. 数据库操作:在数据库管理...
- `DELETE FROM tb_channel a`:指定从表`tb_channel`中删除数据。 - `WHERE a.ROWID IN (SELECT MAX(b.ROWID) FROM tb_channel b WHERE a.policyNo = b.policyNo AND a.classCode = b.classCode)`:通过子查询找...
若要删除特定条件的用户,如ID为1到10的用户,可以写成`DELETE FROM DeleteUser WHERE UserID BETWEEN 1 AND 10`。 2. **安全考虑**:批量删除操作必须谨慎执行,因为一旦数据被删除,往往无法恢复。在执行前,...
`TRUNCATE`适合快速删除大量数据且不需要记录日志或回滚的情况,而`DELETE`则在需要更细粒度控制删除操作或保留回滚能力时更为合适。在实际应用中,应根据具体需求和数据库环境选择合适的方法。
根据给定的文件标题、描述和部分内容,我们可以深入探讨Oracle数据库中删除重复记录的方法,这对于维护数据完整性和提高系统性能至关重要。以下将详细介绍几种在Oracle数据库中有效删除重复记录的技术。 ### 1. ...
### Oracle查询重复数据与删除重复记录方法 #### 一、查询重复数据 ##### 1. 使用ROWID方法 ROWID是Oracle中一个特殊的数据类型,它代表了表中每一条记录在物理存储上的唯一地址。利用ROWID可以非常高效地查询和...
MySQL删除数据教程涵盖了如何根据特定条件从数据库表中删除记录,如何清空整个表的数据,以及如何彻底删除表及其结构等几个方面的操作。首先,教程强调了准备工作的重要性,包括确认MySQL数据库的安装,拥有一个已...
无论是部分字段重复还是完全重复的记录,都可以通过创建临时表的方式提高删除重复记录的效率。此外,在处理重复数据时,还应考虑到保留最新或最旧记录的需求,利用`ROWID`等特性可以轻松实现这一点。总之,合理地...
以上就是Oracle中删除重复记录的几种常见方法,根据实际场景和性能需求,可以选择合适的方式进行操作。需要注意的是,删除操作前应确保有备份,以防止误删重要数据。同时,对于大数据量的表,可能需要考虑使用临时表...
- **解释**:这种方法通过创建一个新的无重复记录的表,然后清空原表并插入新表中的数据来完成重复数据的删除。 #### 四、注意事项 1. **备份**:在执行任何删除操作之前,请确保已经对数据进行了备份,以防意外...
在Oracle数据库中,删除重复数据是一项常见的数据清洗任务,尤其当表设计不当时,重复数据可能导致数据不一致和分析错误。以下将详细解释如何在Oracle中处理这两种类型的重复数据问题:部分字段重复和完全重复记录。...
在SQL中删除重复记录是一个常见的需求,特别是在处理大型数据集时。本文将介绍几种有效的方法,以帮助你在遇到重复记录问题时能有效地清理数据。我们将以Oracle数据库为例,但这些方法在其他SQL数据库系统中也具有...