zoukankan      html  css  js  c++  java
  • MySQL---drop, delete, truncate的区别

    drop, delete, truncate的区别

    删除内容

    drop直接删除整个表, 包含表结构和数据;

    truncate删除表中数据, 表结构及其列, 约束, 索引等不变, 再插入时自增id又从1开始;

    delete删除表中数据, 可以结合where来约束范围.

    删除过程

    delete是从表中一行一行地删除, 事务提交后才生效, 并在事务日志中为所删除的每一行都记录, 以便进行回滚操作.

    truncate则是一次性地从表中删除所有的数据, 通过释放存储表数据所用的数据页来删除数据, 事务日志中只记录页的释放, 不把单独的删除操作记录记入日志中, 删除的行不能恢复, 并且在删除的过程中不会激活与表有关的删除触发器, 执行速度快.

    drop操作立即生效, 不能回滚.

    删除后的空间

    truncate删除表后, 表和索引所占用的空间会恢复到初识大小, 但是delete删除操作不会减少表和索引所占用的空间, drop则会将表所占用的空间全部释放掉.

    应用范围

    truncate只能对表, delete可以对表和视图.

    执行速度

    drop > truncate > delete

    使用选择

    在没有备份的情况下, 谨慎使用drop和truncate, 要删除部分数据行可以采用delete结合where, 并且回滚段要足够大.

    如果想保留表而将表中数据删掉, 并与事务无关, truncate即可实现. 如果与事务有关, 还是选用delete.

    有外键约束引用的表, 不能使用truncate, 而是使用不带where子句的delete.

    作者:凯旋.Lau
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    poj 2337 欧拉回路输出最小字典序路径 ***
    hdu 4831
    hdu 4832 dp ***
    hdu 4833 离散化+dp ****
    hdu 4006 优先队列 2011大连赛区网络赛F **
    hdu 4005 双联通 2011大连赛区网络赛E *****
    hdu 4004 二分 2011大连赛区网络赛D
    hdu 4003 树形dp+分组背包 2011大连赛区网络赛C
    hdu 4002 欧拉函数 2011大连赛区网络赛B
    跨域经验总结
  • 原文地址:https://www.cnblogs.com/KX-Lau/p/12510902.html
Copyright © 2011-2022 走看看