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。




原文地址:https://www.cnblogs.com/3ddan/p/10361695.html