truncate ,drop和不带where子句的delete有什么联系与区别?

本文详细对比了SQL中truncate、不带where子句的delete及drop语句的功能与区别,包括它们对表结构的影响、事务处理特性、空间释放方式、执行速度及安全性等方面。

相同点
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,再重新导入/插入数据

基于NSGA-III算法求解微电网多目标优化调度研究(Matlab代码实现)内容概要:本文围绕基于NSGA-III算法的微电网多目标优化调度展开研究,重点介绍了如何利用该先进多目标进化算法解决微电网系统中多个相互冲突的目标(如运行成本最小化、碳排放最低、供电可靠性最高等)的协同优化问题。文中结合Matlab代码实现,详细阐述了NSGA-III算法的基本原理、在微电网调度模型中的建模过程、约束条件处理、目标函数设计以及仿真结果分析,展示了其相较于传统优化方法在求解高维、非线性、多目标问题上的优越性。同时,文档还提供了丰富的相关研究案例技术支持背景,涵盖电力系统优化、智能算法应用及Matlab仿真等多个方面。; 适合人群:具备一定电力系统基础知识Matlab编程能力的研究生、科研人员及从事能源优化领域的工程技术人员;尤其适合正在进行微电网调度、多目标优化算法研究或撰写相关论文的研究者。; 使用场景及目标:①掌握NSGA-III算法的核心思想及其在复杂能源系统优化中的应用方式;②学习如何构建微电网多目标调度模型并利用Matlab进行仿真求解;③为科研项目、毕业论文或实际工程提供算法实现参考技术支撑。; 阅读建议:建议读者结合文中提供的Matlab代码实例,逐步调试运行并深入理解算法流程模型构建细节,同时可参考文档中列出的其他优化案例进行横向对比学习,以提升综合应用能力。
在 SQL 中,`DROP`、`DELETE` `TRUNCATE` 都用于数据操作,但它们的功能使用场景有明显区别。 ### 功能层面 - **DROP**:用于完全移除数据库对象,如数据表、数据库、视图、存储过程等。执行 `DROP` 操作后,对象及其所有相关的数据结构都会被永久删除,无法通过常规 SQL 语句恢复。例如,删除一个名为 `employees` 的表: ```sql DROP TABLE employees; ``` - **DELETE**:是一种数据操作语言(DML)语句,主要用于从表中删除符合特定条件的行。如果指定条件,则会删除表中的所有行,但表结构依然保留。例如,删除 `employees` 表中 `department` 为 'HR' 的所有行: ```sql DELETE FROM employees WHERE department = 'HR'; ``` - **TRUNCATE**:属于数据定义语言(DDL)语句,用于删除表中的所有行,但保留表结构。 `DELETE` 同,`TRUNCATE` 支持使用 `WHERE` 子句指定删除条件,它会快速清空整个表的数据。例如,清空 `employees` 表的数据: ```sql TRUNCATE TABLE employees; ``` ### 性能层面 - **DROP**:由于要完全移除数据库对象,涉及到释放对象占用的所有存储空间元数据信息,操作开销较大,尤其是对于大表。 - **DELETE**:逐行删除数据,会记录每一行的删除操作到事务日志中,因此对于大表,删除操作可能会比较慢。 - **TRUNCATE**:直接释放表的数据页,记录每一行的删除操作,只记录页的释放,因此速度通常比 `DELETE` 快,尤其是对于大表。 ### 事务层面 - **DROP**:作为 DDL 语句,`DROP` 操作是自动提交的,能回滚。一旦执行,对象就会被永久删除。 - **DELETE**:作为 DML 语句,`DELETE` 操作可以包含在事务中,可以使用 `ROLLBACK` 语句回滚删除操作。 ```sql BEGIN TRANSACTION; DELETE FROM employees WHERE department = 'HR'; -- 如果需要回滚 ROLLBACK; -- 如果确认删除 COMMIT; ``` - **TRUNCATE**:作为 DDL 语句,`TRUNCATE` 操作是自动提交的,能回滚。一旦执行,表中的数据就会被永久删除。 ### 约束索引层面 - **DROP**:删除表时,该表相关的所有约束(如主键、外键、唯一约束等)索引都会被一并删除。 - **DELETE**:删除表中的行会影响表的约束索引。表的结构约束仍然存在,索引也会保持变。 - **TRUNCATE**:清空表中的数据会影响表的约束索引。表的结构约束仍然存在,索引也会保持变,但某些数据库系统(如 SQL Server)会重置自增列的计数器。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值