专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

数据库DELETE 语句,还保存原有的磁盘空间

ins518 2025-07-23 14:44:55 技术文章 4 ℃ 0 评论

MySQL 和 Oracle 的 DELETE 语句与数据存储

MySQL 的 DELETE 操作

当你在 MySQL 中执行 DELETE 语句时:

  1. 逻辑删除:数据从表中标记为删除,不再可见于查询结果
  2. 物理存储:数据实际上仍然存在于磁盘上,只是被标记为"可覆盖"
  3. MySQL 使用 InnoDB 存储引擎时,删除的数据会进入"undo日志"空间
  4. 这些空间可以被新数据覆盖,但在被覆盖前数据仍物理存在
  5. 释放空间:DELETE 操作通常不会立即释放磁盘空间给操作系统,除非执行表优化操作(如 optimize table table_name

Oracle 的 DELETE 操作

Oracle 的处理方式与 MySQL 类似但有区别:

  1. 逻辑删除:数据被标记为删除,不再出现在查询结果中
  2. 物理存储
  3. 删除的数据行仍然存在于数据文件中,只是空间被标记为"可重用"
  4. 这些空间可以用于后续的 INSERT 操作
  5. 高水位线:Oracle 有"高水位线"(HWM)概念,DELETE 不会降低HWM,空间不会自动返还给操作系统
  6. 需要手动回收:要真正释放空间,通常需要执行表重组或使用 SHRINK SPACE 命令

两者共同点

  • 都先进行逻辑删除而非立即物理擦除
  • 删除的数据在未被覆盖前理论上可能被恢复
  • 都需要特定操作才能真正释放磁盘空间

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表