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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    鸟哥的 Linux 私房菜Shell Scripts篇(一)
    证券投资基金会计核算业务指引
    在LINUX上部署SOFA
    bash: sz: command not found
    git常用命令
    git删除指定commit
    dubbo-本地直连
    java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁
    设置Chrome忽略网站证书错误
    mybatis-传多个参数
  • 原文地址:https://www.cnblogs.com/KX-Lau/p/12510902.html
Copyright © 2011-2022 走看看