12.24
- 带QUICK选项的快速删除(大表提速,跳过缓冲)
sql
-- 大表删数据时用QUICK,减少磁盘IO,加快删除(适合MyISAM/InnoDB)
DELETE QUICK FROM large_logs WHERE log_time < DATE_SUB(NOW(), INTERVAL 90 DAY);
- QUICK:减少中间缓冲,直接释放数据块,大表删除速度显著提升。
- 处理外键约束的级联删除(避免删父表数据报错)
sql
-- 先删子表订单,再删主表用户,或用外键级联(这里演示显式删除)
BEGIN;
DELETE FROM orders WHERE user_id = 1001; -- 先删子表关联数据
DELETE FROM user WHERE id = 1001; -- 再删主表数据
COMMIT;
-- 若表有ON DELETE CASCADE外键,可直接删主表(自动删子表)
DELETE FROM user WHERE id = 1001;
- 无级联时必须先删子表,否则触发外键约束报错。
- 关联子查询+NOT EXISTS删除(删无关联数据,精准高效)
sql
-- 删除无任何订单记录的用户(用NOT EXISTS判断,比LEFT JOIN更直观)
DELETE FROM user
WHERE NOT EXISTS (SELECT 1 FROM orders WHERE orders.user_id = user.id);
- 适合判断“主表记录在子表无对应数据”的删除场景,执行效率优于IN子查询。

浙公网安备 33010602011771号