近日在删除数据时,发现除了常用的Delete & Drop语句之外,还有Truncate也是与删除数据相关的,针对上述三种有进行简单的比较与整理

用法

drop

用法:drop table 表名

  1. drop是DDL,会隐式提交,所以,不能回滚,不会触发触发器。

  2. drop语句删除表结构及所有数据,并将表所占用的空间全部释放。

  3. drop语句将删除表的结构所依赖的约束,触发器,索引,依赖于该表的存储过程/函数将保留,但是变为invalid状态。

truncate

清空表中的数据,用法:truncate table 表名

  1. truncate是DDL,会隐式提交,所以,不能回滚,不会触发触发器。

  2. truncate会删除表中所有记录,并且将重新设置高水线和所有的索引,缺省情况下将空间释放到minextents个extent,除非使用reuse storage,。不会记录日志,所以执行速度很快,但不能通过rollback撤消操作(如果一不小心把一个表truncate掉,也是可以恢复的,只是不能通过rollback来恢复)。

  3. 对于外键(foreignkey )约束引用的表,不能使用 truncate table,而应使用不带 where 子句的 delete 语句。

  4. truncatetable不能用于参与了索引视图的表。

delete

delete from 表名 (where 列名 = 值)

  1. delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表空间要足够大,需要手动提交(commit)操作才能生效,可以通过rollback撤消操作。

  2. delete可根据条件删除表中满足条件的数据,如果不指定where子句,那么删除表中所有记录。

  3. delete语句不影响表所占用的extent,高水线(high watermark)保持原位置不变。。

区别

  1. TRUNCATE 和DELETE只删除数据, DROP则删除整个表(结构和数据)。

  2. 应用范围:TRUNCATE只能对TABLE;DELETE可以是table和view。

  3. delete语句是数据库操作语言(dml),这个操作会放到 rollback segement 中,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发。

  4. truncate、drop 是数据库定义语言(ddl),操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发trigger。

总结

  1. delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存,以便进行回滚操作。

  2. 执行速度一般来说:drop>truncate>delete

  3. 在使用drop和truncate时一定要注意,虽然可以恢复,但为了减少麻烦,还是要慎重。

  4. 如果想删除部分数据用delete,注意带上where子句,回滚段要足够大;

    如果想删除表,当然用drop;

    如果想保留表而将所有数据删除,如果和事务无关,用truncate即可;

    如果和事务有关,或者想触发trigger,还是用delete;

    如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。

参考

结语

欢迎关注微信公众号『码仔zonE』,专注于分享Java、云计算相关内容,包括SpringBoot、SpringCloud、微服务、Docker、Kubernetes、Python等领域相关技术干货,期待与您相遇!

数据库:drop、truncate、delete的区别的更多相关文章

  1. drop,truncate,delete 区别

    一.SQL中的语法 1.drop table 表名称                         eg: drop table  dbo.Sys_Test   2.truncate table 表 ...

  2. truncate table,drop,delete的区别

    TRUNCATE TABLE 在功能上与不带 Where 子句的 Delete 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 Delete 速度快,且使用的系统和事务日志资源 ...

  3. mysql----快速删除数据表(drop,truncate.delete)

    概念: 三者均可删除数据表 TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快 ...

  4. MySQL笔记-turncat、drop、delete的区别

    TRUNCATE 语法: TRUNCATE TABLE [schema.] table [{DROP | REUSE} STORAGE]功能: 删除整个表的数据并释放空间   描述: 由于Trunca ...

  5. 删除表的语句(drop truncate delete)

    p.p1 { margin: 0; font: 12px ".PingFang SC" } p.p2 { margin: 0; font: 12px "Helvetica ...

  6. 数据库中drop、delete与truncate的区别

    数据库中drop.delete与truncate的区别 drop直接删掉表: truncate删除表中数据,再插入时自增长id又从1开始 :delete删除表中数据,可以加where字句. (1) D ...

  7. 如何区别数据库删除语句drop与delete与truncate?

    1.delete:删除数据表中的行(可以删除某一行,也可以在不删除数据表的情况下删除所有行) 删除某一行:delete from 数据表名称 where 列名称=值: 删除所有行:delete*fro ...

  8. mysql之drop、truncate和delete的区别

    今天在整理mysql数据库笔记的时候突然想到一个问题,就是drop.truncate和delete的区别,乍一看三者都是有删除的功能,但是具体来看还是有很多区别的.我先把这三个的作用简单说一下,有前辈 ...

  9. drop与truncate与delete的区别与联系

    在mysql和oracle数据库中delete与truncate都是可以用来对数据进行删除操作,但是二者又有些不同. 主要有以下几个区别: 区别一: 根据sql语言分类来说,delete属于DML语言 ...

随机推荐

  1. Android Studio 代码回退

    1.VCS–Local History–Show History 或者 这个按钮 2.代码操作记录出现了,选定我们操作的一个历史阶段 3.点击左上角的按钮(revert),代码回退成功

  2. 2w字 + 40张图带你参透并发编程!

    并发历史 在计算机最早期的时候,没有操作系统,执行程序只需要一种方式,那就是从头到尾依次执行.任何资源都会为这个程序服务,在计算机使用某些资源时,其他资源就会空闲,就会存在 浪费资源 的情况. 这里说 ...

  3. vue watch 和 computed 区别与使用

    目录 computed 和 watch 的说明 与 区别 computed 计算属性说明: watch 监听属性说明: watch 和 computed 的区别是: 使用 参考官方文档 compute ...

  4. Finding the Right EAV Attribute Table

    $customer = Mage::getModel('catalog/product'); $entity = $customer->getResource(); $attribute = M ...

  5. ThinkCMF&Thinkphp 首页静态化处理

    基于TP5的页面静态化教程 1.首页在控制器添加以下代码生成静态页面文件 $info = $this->buildHtml("/staticIndex", 'static', ...

  6. 点击按钮出现时间javascrip代码

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. 10、Entity Framework Core 3.1入门教程-执行原生SQL

    本文章是根据 微软MVP solenovex(杨旭)老师的视频教程编写而来,再加上自己的一些理解. 视频教程地址:https://www.bilibili.com/video/BV1xa4y1v7rR ...

  8. soso官方:搜索引擎的对检索结果常用的评测方法

    http://www.wocaoseo.com/thread-188-1-1.html       很久很久以前,搜索引擎还不象今天的百花齐放,人们对它的要求较低,只要它能把互连网上相关的网站搜出来, ...

  9. 2020,最新Model的设计-APP重构之路

    很多的app使用MVC设计模式来将“用户交互”与“数据和逻辑”分开,而model其中一个重要作用就是持久化.下文中设计的Model可能不是一个完美的,扩展性强的model范例,但在我需要重构的app中 ...

  10. 原生 JavaScript30 练习 Day 1 (原生JS控制键盘模拟击鼓)

     代码如下   <!DOCTYPE html> <html lang="en"> <head>     <meta charset=&qu ...