zoukankan      html  css  js  c++  java
  • Sql中truncate,delete以及drop的比较

    相同点:

      1.truncate和不带where子句的delete、以及drop都会删除表内的数据。

      2.drop、truncate都是DDL语句(数据定义语言),执行后会自动提交。

    不同点:

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


      6.delete是DML语句,不会自动提交。drop/truncate都是DDL语句,执行后会自动提交。

      7、TRUNCATE   TABLE   在功能上与不带   WHERE   子句的   DELETE   语句相同:二者均删除表中的全部行。但   TRUNCATE   TABLE   比   DELETE   速度快,且使用的系统和事务日志资源少。DELETE   语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE   TABLE   通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。 

      8、TRUNCATE   TABLE   删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用   DELETE。如果要删除表定义及其数据,请使用   DROP   TABLE   语句。  
        
      9、对于由   FOREIGN   KEY   约束引用的表,不能使用   TRUNCATE   TABLE,而应使用不带   WHERE   子句的   DELETE   语句。由于   TRUNCATE   TABLE   不记录在日志中,所以它不能激活触发器。    
     

      10、TRUNCATE   TABLE   不能用于参与了索引视图的表

    Drop

    drop可用于删除数据库(drop database 数据库名称)、删除数据表( use 数据库名称 drop table 数据表1名称,数据表2名)或删除数据表字段(use 数据库名称 alter table 数据表名称 drop column 字段名(列名称))。

    值得注意的是:drop语句将删除表的结构、被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.

    Truncate

    Truncate用于删除数据表中的数据,仅数据表中的数据,不删除表( truncate table 数据表名称)。

    Delete

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

    三者的区别

    从删除速度上区分:

    就删除数据的速度而言,一般由快到慢:drop> truncate > delete

    从语言类型上区分:

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

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

    (核心SQL有四部分:数据定义语言DDL、数据操作语言DML、数据控制语言DCL、嵌入式SQL语言)

    从删除内容上:

    truncate和 delete只删除数据不删除表的结构(定义)

    drop删除内容和定义,并释放空间。执行drop语句,将使此表的结构一起删除。

    truncate和delete:

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

    TRUNCATE TABLE 通过释放用于存储表数据的数据页来删除数据,并且在事务日志中只记录页释放,数据不可回滚。

    truncate语句执行以后,id标识列还是按顺序排列,保持连续;

    delete语句执行后,ID标识列不连续

    多学一点:

    alter table 表名 change 原列名 新列名  类型; --修改表的列属性名

    alter table 表名 modify 列名 类型 ;  --修改表的类类型

    alter table 表名 drop 列名;  --删除表的某一列

    alter table 表名 add  列名 类型;--添加某一列

    alter table 表名 rename 新表名; --修改表名
    ---------------------

  • 相关阅读:
    HDU 2149 Public Sale 博弈
    HDU 1850 Being a Good Boy in Spring Festival 博弈
    HDU 2176 取(m堆)石子游戏 博弈
    HDU 1517 A Multiplication Game 博弈
    HDU 2897 邂逅明下 博弈
    51nod 1445 变色DNA 最短路
    cocos creator中粒子效果的使用
    如何在cocos中为节点添加监听事件
    C++中STL常用容器的优点和缺点
    数据库链接池c3p0的配置
  • 原文地址:https://www.cnblogs.com/klb561/p/10963473.html
Copyright © 2011-2022 走看看