MySQL--delete/truncate/drop

  1. delete---delete from SC where id='1001'+++删除数据,留下表的结构(又称表的定义),表的数据和索引空间不会减少
  2. truncate---truncate demo3 SC+++删除数据,留下表结构,表的数据和索引空间恢复至初始值大小
  3. drop---drop demo3 SC/drop database demo3+++删除所有,空间释放
  • truncate 和 delete 只删除数据不删除表的结构 ,drop 语句将删除表的结构被依赖的约束(constrain), 触发器(trigger), 索引(index); 依赖于该表的存储过程/函数将保留, 但是变为 invalid 状态。
  • delete 语句是 dml, 操作会放到 rollback segement 中, 事务提交之后才生效; 如果有相应的 trigger, 执行的时候将被触发。 truncate, drop 是 ddl, 操作立即生效, 原数据不放到 rollback segment 中, 不能回滚。 操作不触发 trigger。
  • delete 语句不影响表所占用的 extent, 高水线保持原位置不动。  truncate 语句缺省情况下见空间释放到 minextents 个 extent, 除非使用 reuse storage; truncate会将高水线复位(回到最开始)。

小心使用 drop 和 truncate, 及时备份。否则哭都来不及。

  • 删除表用 drop。
  • 保留表而将所有数据删除。如果和事务无关, 用 truncate 。 如果和事务有关, 或者想触发 trigger, 还是用 delete。
  • 如果是整理表内部的碎片, 可以用 truncate 跟上 reuse stroage, 再重新导入/插入数据。
原文地址:https://www.cnblogs.com/Dfrank/p/11839467.html