相关文章推荐
想表白的楼房  ·  MySQL :: MySQL 8.4 ...·  2 月前    · 
淡定的香烟  ·  Entity Framework Core ...·  2 月前    · 
憨厚的黑框眼镜  ·  MySQL :: MySQL 8.4 ...·  2 月前    · 
温暖的芒果  ·  Upgrade from containers·  2 月前    · 
近视的苦瓜  ·  Oracle、Teradata和MySQL语 ...·  2 月前    · 
痴情的饼干  ·  市教育局:中心城区部分民办高中征集志愿-部门 ...·  1 年前    · 
爱玩的豌豆  ·  临平区今年增加高中学位约1300个 ...·  1 年前    · 
强健的日记本  ·  AsyncLLMEngine | vLLM 中文站·  1 年前    · 
叛逆的太阳  ·  慶祝中華人民共和國成立75周年 - ...·  1 年前    · 
爱玩的小笼包  ·  Uncaught (in promise) ...·  2 年前    · 
Code  ›  MYSQL笔记:删除操作Delete、Truncate、Drop用法比较 - 墨天轮
数据库 innodb delete mysql
https://www.modb.pro/db/1694879413926187008
气势凌人的麦片
3 年前
  • 学习
    • 课程中心
      推荐优质内容、热门课程
    • 学习路径
      预设学习计划、达成学习目标
    • 知识图谱
      综合了解技术体系知识点
    • 课程库
      快速筛选、搜索相关课程
    • 视频学习
      专业视频分享技术知识
    • 电子文档
      快速搜索阅览技术文档
  • 文档
  • 工具
    • SQLRUN
      在线数据库即时SQL运行平台
    • 数据库在线实训平台
      实操环境、开箱即用、一键连接
    • Oracle巡检
      简单两步,查看报告分析
    • AWR分析
      上传AWR报告,查看分析结果
    • SQL格式化
      快速格式化绝大多数SQL语句
    • SQL审核
      审核编写规范,提升执行效率
    • PLSQL解密
      解密超4000字符的PL/SQL语句
    • OraC函数
      查询Oracle C 函数的详细描述
    • Bethune X
      数据库智能监控巡检平台,90天试用
  • 暂无图片
    • 数据库
    • 云计算
    • 数据产品
    • 中间件
    • 操作系统
    • 芯片
  • 我的订单
  • 登录后可立即获得以下权益
    免费培训课程
    收藏优质文章
    疑难问题解答
    下载专业文档
    签到免费抽奖
    提升成长等级
    立即登录
    登录 注册
      • 登录 注册
    • 首页
    • 资讯
    • 数说
    • 活动
    • 大会
    • 课程
    • 文档
    • 排行
    • 问答
    • 云市场
    • 我的订单
    暂无图片
    觉得内容不错?
    一键收藏 方便随时查看
    暂无图片
    暂无图片
    微信扫码
    复制链接
    新浪微博
    分享数说
    暂无图片
    采集到收藏夹
    分享到数说
    首页 / MYSQL笔记:删除操作Delete、Truncate、Drop用法比较

    MYSQL笔记:删除操作Delete、Truncate、Drop用法比较

    小明 2023-08-25
    27

    5a382f634528da92f697c6eb7e65568f.png

    今天小编给大家梳理一下MYSQL删除操作Delete、Truncate、Drop用法有什么区别,到底该如何合理使用,希望对大家能有帮助!

    1、执行速度比较

    Delete、Truncate、Drop关键字都可以删除数据

    drop>truncate>delete

    2、原理方面

    2.1 delete

    delete属于数据库DML操作语言,只会删除数据表中的记录,会执行事务,执行的时候也会触发触发器。

    InnoDB数据库引擎中,执行delete操作只会给删除的记录打上了删除标记,并不会真正删除数据,只是把删除的数据记录设置为不可见,不会释放磁盘空间,如果插入新的数据可以覆盖该部分空间。

    如果开启事务的话,执行delete操作,会先将要删除数据缓存到rollback segement中,等事务commit之后才生效。

    delete from table_name 不带查询条件会删除表的全部数据,MyISAM引擎会立刻释放磁盘空间,InnoDB 不会释放磁盘空间;如果带查询条件的话都不会释放磁盘空间,可以执行optimize table table_name 会立刻释放磁盘空间。建议如果需要释放存储空间的话可以执行delete后,然后执行optimize table table_name 语句达到清理磁盘空间的目的。

    -- 查询数据库test对应的表t_user 占用的磁盘空间 select concat(round(sum(DATA_LENGTH/1024/1024),2),'M') as table_size from information_schema.tables where table_schema='test' AND table_name='t_user';

    说明:delete 操作是逐行执行删除的,并且同时将每行的的删除操作日志记录在redo和undo表空间中去,便于进行回滚(rollback)和重做操作,因此生成的大量操作日志也会占用磁盘空间。

    2.2 truncate

    truncate是数据库DDL定义语言,不受事务影响,也不会触发 trigger。执行操作后会立即生效,无法找回删除的数据。

    执行truncate table table_name 会立刻释放磁盘空间 ,不管是 InnoDB和MyISAM 都一样 。

    truncate可以退快速清空一个表。并且重置auto_increment自动增长的值。针对不同类型的数据存储引擎是有区别的,具体如下:

    MyISAM:truncate会重置auto_increment(自增序列)的值为1。而delete后表仍然保持auto_increment。

    InnoDB:truncate会重置auto_increment的值为1。delete后表仍然保持auto_increment。但是在做delete整个表之后重启MySQL的话,则重启后的auto_increment会被置为1。

    说明:InnoDB的表本身是无法持久保存auto_increment。delete表之后auto_increment仍然保存在内存,但是重启后就找不到了,只能从1开始。实际上重启后的auto_increment会从 SELECT 1+MAX(ai_col) FROM t 开始。

    使用truncate操作的时候要最好备份表,避免出现不可挽回的情况。

    2.3 drop

    drop属于数据库DDL定义语言,和truncate一样。执行后会立即生效,不可恢复。

     
    推荐文章
    想表白的楼房  ·  MySQL :: MySQL 8.4 Reference Manual :: 17.12.1 Online DDL Operations
    2 月前
    淡定的香烟  ·  Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制开发者社区
    2 月前
    憨厚的黑框眼镜  ·  MySQL :: MySQL 8.4 Reference Manual :: 15.1.9 ALTER TABLE Statement
    2 月前
    温暖的芒果  ·  Upgrade from containers
    2 月前
    近视的苦瓜  ·  Oracle、Teradata和MySQL语法兼容性差异_开发指南(9.1.0.x)_开发指南_数据仓库服务 DWS-华为云
    2 月前
    痴情的饼干  ·  市教育局:中心城区部分民办高中征集志愿-部门动态-南阳市人民政府
    1 年前
    爱玩的豌豆  ·  临平区今年增加高中学位约1300个 主城区新开高中进展怎么样了?_都市快报
    1 年前
    强健的日记本  ·  AsyncLLMEngine | vLLM 中文站
    1 年前
    叛逆的太阳  ·  慶祝中華人民共和國成立75周年 - 鐘樂和鳴 盛世華章 | 香港中樂團
    1 年前
    爱玩的小笼包  ·  Uncaught (in promise) Error: Network Error at createError (createError.js?770c:16:1) at XMLH
    2 年前
    今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
    删除内容请联系邮箱 2879853325@qq.com
    Code - 代码工具平台
    © 2024 ~ 沪ICP备11025650号