Yihui’s Blog

什么是数据库的逻辑删除?数据库的物理删除和逻辑删除有什么区别?

日期:2026-07-11
难度:简单
标签:#面试 #MySQL #逻辑删除 #数据治理 #VIP

一句话答案

逻辑删除通过状态或 deleted_at 标记数据不可见,记录仍保留;物理删除执行 DELETE 真正移除记录,最终由存储引擎回收空间。

面试口语版

逻辑删除适合需要审计、恢复、历史关联和异步清理的业务,查询统一加 deleted_at IS NULL。它的代价是表持续膨胀、所有查询都要防止漏条件、唯一约束会更复杂,而且被删除数据仍占索引和备份。物理删除能真正清理数据并简化查询,但恢复困难,大批量 DELETE 会产生锁、undo、redo 和复制压力。实际常用“先逻辑删除、保留期后分批物理清理”,对隐私删除还要同步处理备份、缓存、搜索和对象存储。

原理拆解

对比项逻辑删除物理删除
数据是否保留保留并标记删除记录
恢复容易依赖备份/日志
查询复杂度必须过滤删除态简单
存储持续占用可逐步回收
审计方便需审计表/日志

关键细节

  • 建议使用可审计的 deleted_at、deleted_by,而不只有模糊的布尔值。
  • MySQL 唯一索引包含 NULL 的语义会影响“删除后允许重建同名对象”的设计。
  • DELETE 后文件未必立即变小,空间可能只在表空间内复用。

面试官追问

  1. 逻辑删除如何实现唯一约束?
  2. 如何防止查询漏加删除条件?
  3. 大表如何分批物理清理?

高分补充

逻辑删除不是合规删除的终点;数据生命周期必须覆盖所有副本和下游系统。

学习清单

  • 准备“逻辑删除 + 延迟物理清理”的生命周期方案。
维护与整理 · Yihui在 GitHub 上编辑

继续阅读

浏览全部文章

SQL与NoSQL有什么区别?MySQL和MongoDB如何选型?实际项目中如何选择?

日期:2026-09-27 标签:#面试 #MySQL #数据库 难度:简单 来源:牛面 MySQL 题库 答案说明:独立整理(站内题目标记为 VIP,未读取会员答案) 一句话答案 MySQL与MongoDB的主要差异在数据模型、事务边界、查询方式和模式演化;按业务访问模式和一致性需求选型。 面试口语版(约 60…

阅读全文