12.19
- 带排序+限制删除(避免一次性删过多)
sql
-- 删前10条分数最低的记录(按score升序,取前10)
DELETE FROM score ORDER BY score ASC LIMIT 10;
-- 删status=0且创建时间超30天的前500条(分批删,防锁表)
DELETE FROM logs WHERE status=0 AND create_time < DATE_SUB(NOW(), INTERVAL 30 DAY) LIMIT 500;
- 按时间范围删除(日志/历史数据常用)
sql
-- 删30天前的订单记录
DELETE FROM orders WHERE create_time < DATE_SUB(CURDATE(), INTERVAL 30 DAY);
-- 删2024年1月1日前的操作日志
DELETE FROM operate_log WHERE log_time < '2024-01-01 00:00:00';
- 多表关联删除(2种写法,适配不同场景)
写法1(JOIN 语法,通用)
sql
-- 删用户表中,关联的地址表无数据的用户
DELETE u FROM user u LEFT JOIN user_address addr ON u.id=addr.user_id WHERE addr.id IS NULL;
写法2(子查询语法)
sql
-- 删订单表中,用户已注销的订单(子查询查注销用户ID)
DELETE FROM orders WHERE user_id IN (SELECT id FROM user WHERE is_delete=1);
- 带IF条件删除(动态判断)
sql
-- 若用户积分<0,删除该用户的会员记录
DELETE FROM user_vip WHERE user_id IN (SELECT id FROM user WHERE integral < 0);
-- 批量删多个ID的记录(逗号分隔)
DELETE FROM student WHERE id IN (101, 103, 105, 107);

浙公网安备 33010602011771号