DROP:

DROP TABLE test;

删除表test,并释放空间,将test删除的一干二净。

TRUNCATE:

TRUNCATE test;

删除表test里的内容,并释放空间,但不删除表的定义,表的结构还在。

DELETE:

1、删除指定数据

删除表test中年龄等于30的且国家为US的数据

DELETE FROM test WHERE age=30 AND country='US';

2、删除整个表

仅删除表test内的所有内容,保留表的定义,不释放空间。

DELETE FROM test 或者 TRUNCATE test;

truncate table 命令将快速删除数据表中的所有记录,但保留数据表结构。这种快速删除与 delete from 数据表的删除全部数据表记录不一样,delete 命令删除的数据将存储在系统回滚段中,需要的时候,数据可以回滚恢复,而truncate 命令删除的数据是不可以恢复的。

相同点

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

 

SQL关于删除的三个语句:DROP、TRUNCATE、 DELETE 的区别。的更多相关文章

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

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

  2. SQL 删除的三个语句:DROP、TRUNCATE、 DELETE 的区别

    转载:http://www.runoob.com/sql/sql-delete.html DROP: DROP test; 删除表test,并释放空间,将test删除的一干二净. TRUNCATE: ...

  3. 数据库中删除语句Drop、Delete、Truncate的相同点和不同点的比较

    数据库删除语句的分别介绍: Delete:用于删除表中的行(注:可以删除某一行:也可以在不删除表的情况下(即意味着表的结构.属性.索引完整)删除所有行) 语法:删除某一行:Delete From 表名 ...

  4. drop,truncate,delete 区别

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

  5. truncate table,drop,delete的区别

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

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

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

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

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

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

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

  9. delete trancate drop三者之间的区别

    简而言之: 删除效果及速度:Drop > truncate > delete 原因: delete,逐行删除,且用日志逐行记录用于回滚,会执行删除触发器:       ------> ...

随机推荐

  1. Beam内置的数据源清单(Java、Python)

    不多说,直接上干货! Beam内置的Java数据源清单: Beam内置的Python数据源清单:  

  2. DedeCMS {dede:field name='array' /}的用法

    field支持用array获取任意字段的值.(支持标记:文章列表模板的 {dede:field name='array' /}.arclist.arclistsg.loop.sql 标签)   例如平 ...

  3. Smarty 限制foreach的循环次数

    <!--{foreach from=$news item=news name=foo}--> <!--{if $smarty.foreach.foo.index <7}--&g ...

  4. 记一次无法登录 wine QQ

    入Linux坑第X天,过了五一小长假,回来布置我的环境,本来不应该装一些不必要的东西分自己心,但还是装上,以便不时之需. 把输入法装好后,就安装了QQ,查过资料,都说wine_QQ国际版可以使用,于是 ...

  5. Tomcat实现Session共享

    一个Tomcat中有多一个web应用,然后想共享session,只需在host中加上 <Valve className="org.apache.catalina.authenticat ...

  6. 结合IL和Windbg来看.Net调用继承虚方法的执行顺序

    先上测试代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  7. SQL Server 2008 报错:已成功与服务器建立连接,但是在登录前的握手期间发生错误

    今天SqlServer 2008连接数据库时报错:已成功与服务器建立连接,但是在登录前的握手期间发生错误.在连接到 SQL Server 2008 时,在默认的设置下 SQL Server 不允许远程 ...

  8. Java Knowledge series 2

    JVM Analysis & Design The object-oriented paradigm is a new and different way of thingking about ...

  9. MotionEvent的getX(),getY()与getRawX(),getRawY()区别

    在Android的View中getX  getRawX获取的坐标是不一样的,只是相对比照的对象不一样而已. 1.在View中: getX()是表示Widget相对于自身左上角的x坐标,而getRawX ...

  10. dedecms网站扩展手机网站—共用数据库真正做到电脑手机同步访问,原pc站无需改动,对原pc站无任何影响

    在如今无线互联网大潮的冲击下,越来越多的pc网站访问量下降,首当其冲的就是以pc网站为生的站长们,为了顺应无线互联网的要求,站长们很有必要为自己的pc网站扩展一套手机网站,更早的抓住手机用户的流量,使 ...