博客
关于我
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是如何做容器测试的?
    查看>>
    mysql更改数据库表utf-8_修改mysql数据库为 utf-8
    查看>>
    mysql更改表引擎INNODB为MyISAM的方法总结
    查看>>
    mysql更新一个表里的字段等于另一个表某字段的值
    查看>>
    Mysql更新时间列只改日期为指定日期不更改时间
    查看>>
    MySQL更新锁(for update)摘要
    查看>>
    mysql更新频率_MySQL优化之如何了解SQL的执行频率
    查看>>
    mysql替换表的字段里面内容
    查看>>
    MySQL最多能有多少连接
    查看>>
    MySQL最大建议行数 2000w,靠谱吗?
    查看>>
    MySQL有哪些锁
    查看>>
    MySQL服务器安装(Linux)
    查看>>
    mysql服务器查询慢原因分析方法
    查看>>
    mysql服务无法启动的问题
    查看>>
    MySQL杂谈
    查看>>