SQL中drop、truncate和delete的应用场景

版权声明:欢迎转载,注明作者和出处就好!如果不喜欢或文章存在明显的谬误,请留言说明原因再踩哦,谢谢,不断进步! https://blog.csdn.net/qq_34417408/article/details/82356943

最近在做的项目中需要对表进行重用,准确地说应该是把数据表中地数据清掉,但表结构及索引等表属性都不变。针对这个场景,这里简单区分下SQL中常见的drop、truncate、delete;已经了解的同学可以略过。

从操作性质上分:

 SQL有DDL、DCL、DML三种:
         delete属于DML(数据库操作语言):操作原数据会被放置到rollback segement 中,可进行回滚操作(用于事务原子操作),同时可触发trigger;
         truncate、drop属于DDL(数据库定义语言):操作立即执行,无数据被放置rollback segement区域,不会触发triggle(由于 truncate TABLE 释放数据页资源,不记录在日志中,所以它不能激活触发器);

从功能上分:

 简单粗略分析:delete功能相对更多,可以添加where 语句:delete from 表名称 where 列名称 = 值;
 具体细分:
       drop (删除表):删除内容和定义,把整个表去掉,同时释放资源(删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index),但依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid)。
      truncate (清空表中的数据):清空表数据,释放空间但不删除定义(保留表的数据结构)。
      delete (删除表中的数据):delete 语句用于删除表中的行,每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存,以便进行回滚操作。

注:truncate TABLE 在功能上与不带 WHERE 子句的 delete 语句相同:二者均删除表中的全部行。但 truncate TABLE 比 delete 速度快,且使用的系统和事务日志资源少。
      delete 语句每次删除一行,并在事务日志中为所删除的每行记录一项。    

PS:对于执行速度,一般来说: drop> truncate > delete。

大家针对不同的应用场景,选择合适的sql,文章很基础,主要是平时总结温故,共勉!!

猜你喜欢

转载自blog.csdn.net/qq_34417408/article/details/82356943