引言
在 MySQL 中,删除数据或表结构的操作看似简单,但不同操作(如 DELETE
、TRUNCATE
、DROP
)背后的原理和适用场景差异巨大。错误选择可能导致性能问题或数据丢失!本文通过通俗的比喻、流程图和表格,带你深入理解它们的原理与差异。
DELETE 操作的原理
DELETE … IN
执行流程
- 解析查询:
MySQL 解析语句,确认目标表和WHERE
条件(如IN (1,2,3)
或子查询)。 - 优化匹配:
- 若
IN
为固定值列表,直接匹配; - 若为子查询,先执行子查询生成临时结果集。
- 若
- 逐行标记删除(以 InnoDB 为例):
- 通过索引或全表扫描定位数据行;
- 写入 Undo Log(用于事务回滚);
- 标记行记录为“已删除”(实际清理由 Purge 线程异步完成)。
- 提交事务:
- 提交后,数据从用户视角消失,物理空间可能仍保留(后续复用