MySQL关联删除(DELETE JOIN)表数据

一、最核心语法(记住这个就够)

1. **只删除子表数据**(最常用、最安全)

1
2
3
4
DELETE 子表
FROM 子表
JOIN 主表 ON 子表.关联字段 = 主表.关联字段
WHERE 主表.条件;

2. **同时删除主表 + 子表数据**

1
2
3
4
DELETE 主表, 子表
FROM 主表
JOIN 子表 ON 主表.id = 子表.主表ID
WHERE 条件;

二、最常用示例(直接套)

示例 1:删除某个用户的所有订单(只删订单)

1
2
3
4
DELETE orders
FROM orders
JOIN user ON orders.user\_id = user.id
WHERE user.id = 100;

✅ **只删 orders 表**
✅ **user 表不动**

示例 2:删除用户 + 同时删除他的所有订单

1
2
3
4
DELETE user, orders
FROM user
JOIN orders ON user.id = orders.user\_id
WHERE user.id = 100;

✅ **主表子表一起删**
✅ **一步到位**

示例 3:左关联删除(没有匹配也删)

1
2
3
4
DELETE user
FROM user
LEFT JOIN orders ON user.id = orders.user\_id
WHERE orders.user\_id IS NULL;

✅ 删除**没有订单的用户**

三、安全提醒(非常重要)

✅删除必须带where条件,**如果不带where条件会将所有关联上的数据全部删除**
✅DELETE LEFT JOIN WHERE NULL:专门用来删除没关联上的数据(不存在的数据)