博客
关于我
MySql的Delete、Truncate、Drop分析
阅读量:790 次
发布时间:2023-02-13

本文共 1037 字,大约阅读时间需要 3 分钟。

MySQL truncate 和 delete 的区别解析

在使用 MySQL 时,truncatedelete 是常用的数据删除命令,但它们在功能和行为上存在显著差异。本文将详细分析这两种命令的区别,帮助您更好地选择合适的命令。

操作类型

truncatedelete 都用于删除表中的数据,但它们的操作类型有所不同:

  • truncate:这是 DDL 语句(数据定义语言),操作立即生效,不会放到回滚段中,且无法回滚。
  • delete:这是 DML 语句(数据操作语言),操作会放到回滚段中,支持回滚,且可以触发触发器。

数据持久性

truncate 删除的数据不会被存储在回滚段中,操作立即生效,且不能回滚。delete 则会将删除操作记录到回滚段中,允许在事务提交后进行回滚。

对表结构的影响

truncate 删除数据后不会改变表的结构定义,包括约束、触发器和索引等。delete 也不会改变表的结构,但需要注意的是,删除大量数据时可能会影响表的性能。

存储引擎差异

在不同的存储引擎中,truncatedelete 的行为有所不同:

  • MyISAM

    • truncate 会重置 auto_increment 值为 1。
    • delete 删除后,auto_increment 保持不变。
  • InnoDB

    • truncate 会重置 auto_increment 值为 1。
    • delete 删除后,auto_increment 保持不变,但在数据库重启后会从 1 开始。
  • 需要注意的是,InnoDB 的 auto_increment 值在数据库重启后会丢失,因此在重启后需要通过 SELECT 1 + MAX(ai_col) FROM t 来恢复。

    使用场景

    • 删除部分数据:建议使用 delete 命令,并结合 where 子句指定条件,确保只删除特定数据。
    • 删除整个表:使用 truncate 命令更为高效,尤其适用于需要立即生效且不需要回滚的操作。
    • 整理表内碎片:可以使用 truncate table 加上 reuse storage 选项,再重新导入数据或插入新数据。

    注意事项

    • 事务管理delete 操作可以放到回滚段中,适合需要事务支持的场景。
    • 数据备份:在使用 droptruncate 前,建议确保有足够的数据备份,避免数据丢失。

    通过合理选择 truncatedelete 命令,可以根据具体需求优化数据库性能和数据管理流程。

    转载地址:http://opdfk.baihongyu.com/

    你可能感兴趣的文章
    mysql客户端工具使用
    查看>>
    MySQL密码忘记,怎么办?
    查看>>
    mysql对同一张表进行查询和赋值更新
    查看>>
    mysql导入数据库出现:Incorrect string value: '\xE7\x82\xB9\xE9\x92\x9F' for column 'chinese' at row 1...
    查看>>
    mysql导入(ibd文件)
    查看>>
    Mysql工作笔记006---Mysql服务器磁盘爆满了_java.sql.SQLException: Error writing file ‘tmp/MYfXO41p‘
    查看>>
    mysql常用命令
    查看>>
    MySQL常用指令集
    查看>>
    mysql常用操作
    查看>>
    MySQL常用日期格式转换函数、字符串函数、聚合函数详
    查看>>
    MySQL常见错误分析与解决方法总结
    查看>>
    MySQL底层概述—2.InnoDB磁盘结构
    查看>>
    MySQL底层概述—3.InnoDB线程模型
    查看>>
    MySQL底层概述—5.InnoDB参数优化
    查看>>
    MySQL底层概述—6.索引原理
    查看>>
    MySQL底层概述—7.优化原则及慢查询
    查看>>
    MySQL底层概述—8.JOIN排序索引优化
    查看>>
    MySQL底层概述—9.ACID与事务
    查看>>
    Mysql建立中英文全文索引(mysql5.7以上)
    查看>>
    mysql建立索引的几大原则
    查看>>