首页/数据/SQL 速查/DELETE 基础与分批删除
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条函数速查60 条
变更与事务52 条
性能与执行计划72 条

DELETE 基础与分批删除

按条件删除行:逐行记录日志、可回滚、触发 DELETE 触发器;大表删除要分批做,避免长事务与主从延迟。

SQL 速查数据更新于 2026-10-12

示例

示例
DELETE FROM logs
WHERE created_at < '2023-01-01'
LIMIT 1000;   -- MySQL 支持 LIMIT;分批循环执行
回滚事务内可 ROLLBACK(InnoDB/PostgreSQL 都支持)
大表一次性删除千万行会长时间持锁并产生大量 binlog/WAL;分批更稳
触发器会触发 DELETE 触发器与级联外键动作
DELETE 不带 WHERE 清空全表:行数校验(先 SELECT COUNT(*))与事务包裹是标准动作。

易错点

  • MySQL 单表 DELETE 支持 ORDER BY + LIMIT,多表语法不支持 LIMIT,写混了会报错
  • 被删除的行空间不会立刻归还操作系统(InnoDB 常态),表空间回收要靠后续重建或 OPTIMIZE TABLE

数据来源与参考

  • MySQL 8.0 Reference Manual · DELETE
  • PostgreSQL Documentation · DELETE
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌