zoukankan      html  css  js  c++  java
  • MySQL-删除对比

    drop,delete与truncate的区别
    1.DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。以便回滚。
      TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。
      不记录在日志中,所以它不能激活触发器。
      drop直接删掉表。
     
    2.表和索引所占空间。
      drop > truncate > delete
      当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小,
      DELETE操作不会减少表或索引所占用的空间。
      drop语句将表所占用的空间全释放掉。
     
    3.应用范围。
      TRUNCATE 只能对TABLE;DELETE可以是table和view
      TRUNCATE 和DELETE只删除数据,而DROP则删除整个表(结构和数据)。
      truncate与不带where的delete :只删除数据,而不删除表的结构(定义)
      drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);
      依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。
     
    4.作用失效
      delete语句为DML(data maintain Language),这个操作会被放到 rollback segment中,事务提交后才生效。
      如果有相应的 tigger,执行的时候将被触发。
      truncate、drop是DLL(data define language),操作立即生效,
      原数据不放到 rollback segment中,不能回滚

    5.选择
      要删除部分数据行采用delete+where
      要删除表用drop;
      若想保留表而将表中数据删除:
      如果于事务无关,用truncate即可实现。
      如果和事务有关,或老师想触发trigger,还是用delete。




  • 相关阅读:
    vijos 1426
    2455 繁忙的都市
    2104 删除物品
    3235 战争
    BZOJ 2962
    COGS 265 线段覆盖
    P2184 贪婪大陆
    0729模拟赛解题报告
    BZOJ 1012
    BZOJ 2763
  • 原文地址:https://www.cnblogs.com/3ddan/p/10361695.html
Copyright © 2011-2022 走看看