12.25

  1. 带ORDER BY+LIMIT的限量删除(避免误删,精准控量)

sql
-- 按注册时间倒序,仅删最早注册的10条过期用户(防止批量误删)
DELETE FROM user
WHERE register_time < '2020-01-01'
ORDER BY register_time ASC
LIMIT 10;

  • LIMIT:严格限制删除行数,适合分批清理或验证删除效果
  • ORDER BY:按指定字段排序,确保只删预期数据行
  1. LEFT JOIN删除孤立数据(删主表无关联子表记录)

sql
-- 删除无关联商品的分类(LEFT JOIN找无匹配数据)
DELETE c FROM category c
LEFT JOIN product p ON c.id = p.category_id
WHERE p.id IS NULL;

  • 比NOT EXISTS更直观,适合多表关联场景,快速定位无引用记录
  1. 临时表辅助删除(复杂条件分步骤,高效可控)

sql
-- 步骤1:创建临时表存待删用户ID(如近365天无登录且积分<50)
CREATE TEMPORARY TABLE temp_del_users AS
SELECT id FROM user
WHERE last_login_time < DATE_SUB(NOW(), INTERVAL 365 DAY)
AND integral < 50;

-- 步骤2:关联临时表删除(可先校验临时表数据,再执行删除)
DELETE u FROM user u
JOIN temp_del_users t ON u.id = t.id;

-- 步骤3:删除临时表(会话结束自动销毁,也可手动删)
DROP TEMPORARY TABLE IF EXISTS temp_del_users;

  • 适合复杂条件删除,先筛选再删除,降低误删风险,大表处理更稳
posted @ 2025-12-25 23:39  喜欢写轻小说的日央  阅读(6)  评论(0)    收藏  举报