mysql一条SQL清理用户的4步操作步骤(顺序一旦写错就翻车)

作者:袖梨 2026-07-31

mysql一条SQL清理用户的4步操作步骤(顺序一旦写错就翻车)的重点在于把前置条件、操作顺序和容易误判的地方分清楚。

场景

老板一句话:“把手机号 1381234 开头的用户全部清掉!”

我们写了 4 条 DELETE,再套上事务,就像拆积木一样,一拆到底。

顺序错了会报错或留下垃圾数据,今天用大白话讲明白。

先删子,再删父

mysql一条SQL清理用户的4步操作步骤(顺序一旦写错就翻车)

4 步操作速览

步骤目标表删除条件删除内容必须排第几步?
order_item订单号在 1381234 用户的订单里订单明细第1️⃣ 步(子表)
orders用户手机 1381234%订单第2️⃣ 步
coupon同上优惠券第3️⃣ 步
user同上用户本人第4️⃣ 步(根表)

为什么要包一层事务?

事务关键词大白话解释
START TRANSACTION开工!
COMMIT全部成功,盖章生效
ROLLBACK中途出错,一键撤销,谁也不吃亏

顺序写错的后果

错误顺序示例当场后果
先删 user子表 orders 还引用它 → 外键报错 ❌
先删 ordersorder_item 还引用 orders → 依旧报错 ❌

正确完整代码

START TRANSACTION;-- 1️⃣ 删订单明细DELETE FROM order_itemWHERE order_id IN (  SELECT o.id  FROM orders o  JOIN user u ON u.id = o.user_id  WHERE u.phone LIKE '1381234%');-- 2️⃣ 删订单DELETE FROM ordersWHERE user_id IN (  SELECT id FROM user WHERE phone LIKE '1381234%');-- 3️⃣ 删优惠券DELETE FROM couponWHERE user_id IN (  SELECT id FROM user WHERE phone LIKE '1381234%');-- 4️⃣ 删用户DELETE FROM userWHERE phone LIKE '1381234%';COMMIT;

一句话总结

先拆子,再拆父,事务兜底,顺序不乱,数据就干净!

总结

相关文章

精彩推荐