博客
关于我
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数据库的高可用
    查看>>
    Mysql数据库相关各种类型的文件
    查看>>
    MYSQL数据库简单的状态检查(show processlist)
    查看>>
    MYSQL数据库简单的状态检查(show status)
    查看>>
    MySQL数据库系列
    查看>>
    MYSQL数据库自动本地/异地双备份/MYSQL增量备份
    查看>>
    mysql数据库表增添字段,删除字段、修改字段的排列等操作,还不快来
    查看>>
    MySQL数据库被黑了
    查看>>
    mysql数据库设计
    查看>>
    MySQL数据库设计与开发规范
    查看>>
    MYSQL数据库进阶操作
    查看>>
    MySQL数据库配置文件调优详解
    查看>>
    MySQL数据库酒店客房管理系统(含MySQL源码) 结课作业 做的不是很好
    查看>>
    mysql数据库里的一些坑(读高性能mysql有感)
    查看>>
    MySQL数据库面试题(2021最新版)
    查看>>
    MySQL数据库高并发优化配置
    查看>>
    mysql数据恢复
    查看>>