近日在删除数据时,发现除了常用的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. 谈谈javascript的基本规范~~~~

    1.不要在同一行声明多个变量. 2.请使用===或==来比较true或false或者数值 3.使用对象字面量代替new Array这种形式 4.不要使用全局函数 5.switch语句必须带有defau ...

  2. leetcode刷题记录——数组与矩阵

    @ 目录 283. 移动零 566. 重塑矩阵 485. 最大连续1的个数 240. 搜索二维矩阵 II 378. 有序矩阵中第K小的元素 645. 错误的集合 287. 寻找重复数 667. 优美的 ...

  3. SpringMVC实现客户端跳转

    之前无论是/index跳转到index.jsp 还是/addProduct 跳转到showProduct.jsp,都是服务端跳转. 这一篇练习如何进行客户端跳转 @ 目录 修改IndexControl ...

  4. SpringCloudAlibaba-服务网关Gateway

    一:网关简介 在微服务架构中,一个系统会被拆分为很多个微服务.那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用.这样的话会产生很多问 ...

  5. python基础 Day10

    python Day10 函数的参数升级版 形参角度 万能参数*arg #在函数定义时,*代表聚合.他将所有的位置参数聚合成一个元组,赋值给了args def test(*args): print(& ...

  6. gorilla/mux 的学习

    原文链接:gorilla/mux的学习 源代码: package main import ( "encoding/json" "fmt" "githu ...

  7. springboot整合websocket后打包报错:javax.websocket.server.ServerContainer not available

    项目整合了websocket以后,打包多次都没有成功,原来是报错了,报错内容如下: Error starting ApplicationContext. To display the conditio ...

  8. css设置图片宽高后,图片变模糊的问题

    参考网站:https://segmentfault.com/q/1010000010391524 { image-rendering: -moz-crisp-edges; /* Firefox */ ...

  9. python字典的概念与基本操作

    字典是非常常用的一种数据结构,它与json格式的数据非常相似,核心就是以键值对的形式存储数据,关于Python中的字典做如下四点说明: 1.构造字典对象需要用大括号表示 {},每个字典元素都是以键值对 ...

  10. npm修改默认配置

    1.nodejs在program files下面会造成一些项目中的问题,因此nodejs在program files下需要先卸载nodejs 2.安装nodejs到自定义的目录下面,例:D:\node ...