Files
integral-shop/docs/com-bosenyuan-miao80-data-cleanup-260604.md
2026-06-04 22:52:38 +08:00

550 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 宝应博森元 miao80 用户数据清理方案
## 基本信息
- 公司:宝应博森元
- Spring profile`miao80`
- MySQL`123.56.214.80:3306`
- 数据库:`yangtangyoupin`
- 任务日期2026-06-04
- 方案目的:删除指定会员及其寄卖、订单、奖金、积分、地址、提现等关联数据。
## 数据来源
1. Excel 清除名单:`/Users/mac/Works26/miao-july/bosenyuan清除名单260604.xlsx`
2. 手工补充名单:此前核查出的 30 个有隐藏未售寄卖商品的会员。
## 清理范围
### Excel 清除名单
| 用户ID | 昵称 | 联系方式 | 上级ID |
| --- | --- | --- | --- |
| 93320 | 崔龙云 | 18921916448 | 93315 |
| 93317 | 杨长霞 | 13852763959 | 93212 |
| 93312 | 成成 | 13905238633 | 93296 |
| 93311 | 袁月 | 18932311595 | 93303 |
| 93310 | 范明中 | 18915115858 | 93303 |
| 93308 | 138****0239 | 13813100239 | 93248 |
| 93304 | 卢红 | 13905235316 | 93303 |
| 93302 | 周顺芹 | 13511707356 | 93250 |
| 93298 | 顾善道 | 15005253578 | 93120 |
| 93293 | 朱梅芳 | 13801441506 | 93136 |
| 93292 | 蔡宛序 | 17625471367 | 93213 |
| 93291 | 130****3522 | 13092023522 | 93254 |
| 93288 | 于桂平 | 13305239833 | 93249 |
| 93286 | 陆哓明 | 13952753228 | 93250 |
| 93285 | 仲妮妮 | 17351389708 | 93212 |
| 93282 | 张伏顺 | 13016592366 | 93254 |
| 93281 | 189****9338 | 18951269338 | 93213 |
| 93280 | 韩国林 | 15861304478 | 93248 |
| 93278 | 陈文青 | 15062891641 | 92775 |
| 93277 | 许良会 | 18260691419 | 93239 |
| 93275 | 黄丽辉 | 15262265025 | 93147 |
| 93269 | 吴发 | 18360337533 | 92687 |
| 93268 | 马猛宏 | 13921912348 | 93250 |
| 93267 | 卢玉凤 | 17558780051 | 93212 |
| 93266 | 周同 | 13115254379 | 93265 |
| 93265 | 王彬 | 18915131699 | 93254 |
| 93263 | 陈斌 | 18012324636 | 93019 |
| 93262 | 徐猫猫 | 13390629258 | 93161 |
| 93261 | 潘年庆 | 13773341597 | 93251 |
| 93260 | 纪开东 | 13179766726 | 93251 |
| 93256 | 卢玉芬 | 18012323088 | 93161 |
| 93253 | 刘加良 | 15298672227 | 93239 |
| 93252 | 夏宝华 | 15262250561 | 93214 |
| 93241 | 孙万万 | 13951441675 | 93214 |
| 93238 | 戴向英 | 15189893800 | 93136 |
| 93233 | 严登文 | 15995116338 | 93214 |
| 93228 | 苗永粉 | 13773321176 | 92688 |
| 93217 | 邹华 | 18796681777 | 93206 |
| 93200 | 戴增中 | 13813104768 | 93193 |
| 93194 | 姚焕桂 | 13773330344 | 93075 |
| 93190 | 姜红爱 | 17715862910 | 93075 |
| 93160 | 季安红 | 13913432863 | 93107 |
| 93153 | 王祥 | 15380316138 | 92973 |
| 93143 | 郑娟 | 17751330452 | 93075 |
| 93142 | 李德荣 | 13813104919 | 93109 |
### 手工补充名单
| 用户ID | 昵称 | 联系方式 | 待清理未售商品数 |
| --- | --- | --- | --- |
| 92801 | 成宏梅 | 18751483086 | 3 |
| 93011 | 李迎春 | 13505270568 | 3 |
| 93032 | 沈宝军 | 13348149448 | 2 |
| 93073 | 陈海霞 | 15152714200 | 1 |
| 93078 | 顾晓燕 | 13151600166 | 1 |
| 93120 | 于秀梅 | 13348140510 | 1 |
| 93136 | 戴玉山 | 13813100018 | 1 |
| 93147 | 陈小燕 | 18066016798 | 1 |
| 93155 | 王锐 | 18952581561 | 1 |
| 93185 | 王学梅 | 15150886020 | 1 |
| 93193 | 相荣 | 18796692299 | 1 |
| 93216 | 张萍 | 18252750442 | 1 |
| 93218 | 李润芝 | 15050708588 | 1 |
| 93248 | 董鲜 | 19533096227 | 1 |
| 93284 | 仇云 | 17317753117 | 1 |
| 93287 | 王珏 | 19741771099 | 1 |
| 93290 | 段玉香 | 17751370387 | 1 |
| 93295 | 季爱玲 | 18932366911 | 1 |
| 93297 | 蔡先生 | 13952533248 | 1 |
| 93301 | 毛天梅 | 18012327099 | 1 |
| 93305 | 王素琴 | 13092025465 | 1 |
| 93306 | 殷先生 | 15262252218 | 1 |
| 93307 | 董先生 | 15252737658 | 1 |
| 93315 | 朱继英 | 15800764854 | 1 |
| 93318 | 王琴 | 15150881748 | 1 |
| 93321 | 爱之香 | 15951439818 | 1 |
| 93322 | 邓学美 | 13505254585 | 1 |
| 93323 | 梁鹤贵 | 15050701288 | 1 |
| 93325 | 李杰 | 15050708139 | 1 |
| 93327 | 刘正娟 | 15062896288 | 1 |
### 合并后用户ID
- Excel45 人
- 手工补充30 人
- 重叠0 人
- 合并后75 人
```sql
SET @cleanup_user_ids = '92801,93011,93032,93073,93078,93120,93136,93142,93143,93147,93153,93155,93160,93185,93190,93193,93194,93200,93216,93217,93218,93228,93233,93238,93241,93248,93252,93253,93256,93260,93261,93262,93263,93265,93266,93267,93268,93269,93275,93277,93278,93280,93281,93282,93284,93285,93286,93287,93288,93290,93291,93292,93293,93295,93297,93298,93301,93302,93304,93305,93306,93307,93308,93310,93311,93312,93315,93317,93318,93320,93321,93322,93323,93325,93327';
```
实际执行建议使用临时表承载 ID
```sql
DROP TEMPORARY TABLE IF EXISTS tmp_bosenyuan_cleanup_users;
CREATE TEMPORARY TABLE tmp_bosenyuan_cleanup_users (
id INT PRIMARY KEY
);
INSERT INTO tmp_bosenyuan_cleanup_users (id) VALUES
(92801),(93011),(93032),(93073),(93078),(93120),(93136),(93142),(93143),(93147),
(93153),(93155),(93160),(93185),(93190),(93193),(93194),(93200),(93216),(93217),
(93218),(93228),(93233),(93238),(93241),(93248),(93252),(93253),(93256),(93260),
(93261),(93262),(93263),(93265),(93266),(93267),(93268),(93269),(93275),(93277),
(93278),(93280),(93281),(93282),(93284),(93285),(93286),(93287),(93288),(93290),
(93291),(93292),(93293),(93295),(93297),(93298),(93301),(93302),(93304),(93305),
(93306),(93307),(93308),(93310),(93311),(93312),(93315),(93317),(93318),(93320),
(93321),(93322),(93323),(93325),(93327);
```
## 当前库只读统计
统计时间2026-06-04`miao80 / yangtangyoupin`
| 表 / 范围 | 命中行数 |
| --- | ---: |
| `wa_users` | 75 |
| `eb_user` | 74 |
| `wa_merchandise` | 1698 |
| `wa_order` seller 或 buyer 命中 | 2609 |
| `wa_selfbonus_log` | 1627 |
| `wa_sharebonus_log` | 1545 |
| `wa_coupon_log` | 198 |
| `wa_withdraw` | 44 |
| `wa_money_log` | 0 |
| `wa_address` | 80 |
| `wa_alipay` | 65 |
| `wa_bank` | 1 |
| `eb_user_integral_record` | 1666 |
| `eb_user_address` | 73 |
| `eb_user_bill` | 47 |
| `eb_user_brokerage_record` | 0 |
| `eb_user_experience_record` | 47 |
| `eb_user_extract` | 0 |
| `eb_user_level` | 0 |
| `eb_user_recharge` | 0 |
| `eb_user_sign` | 0 |
| `eb_user_token` | 0 |
| `eb_user_visit_record` | 12 |
| `eb_store_cart` | 0 |
| `eb_store_coupon_user` | 0 |
| `eb_store_order` | 47 |
| `eb_sms_record` | 0 |
## 特殊检查
### `wa_users` 与 `eb_user` 不一致
`wa_users` 命中 75 人,`eb_user` 命中 74 人。缺失的 `eb_user`
| 用户ID | 昵称 | 联系方式 |
| --- | --- | --- |
| 93305 | 王素琴 | 13092025465 |
### 删除名单外仍指向待删用户的推荐关系
删除前需要决定是否置空为 `0`,或改挂到指定上级。
`wa_users.pid` 外部引用 1 条:
| 用户ID | 昵称 | 联系方式 | 当前上级ID |
| --- | --- | --- | --- |
| 93036 | 赵玉文 | 18091856709 | 92801 |
`eb_user.spread_uid` 外部引用 14 条:
| uid | account | nickname | phone | spread_uid |
| --- | --- | --- | --- | --- |
| 92881 | 18115115512 | 成明强 | 18115115512 | 92801 |
| 92903 | 18036263863 | 徐丹 | 18036263863 | 92801 |
| 92940 | 13773342930 | 朱友华 | 13773342930 | 92801 |
| 92976 | 13773334985 | 何军健 | 13773334985 | 92801 |
| 92983 | 15052568923 | 柴秉丹 | 15052568923 | 92801 |
| 93009 | 13092025465 | 王素琴 | 13092025465 | 92801 |
| 93030 | 15298470085 | 张琴 | 15298470085 | 93011 |
| 93036 | 18091856709 | 赵玉文 | 18091856709 | 92801 |
| 93094 | 15952533800 | 朱鹤峰 | 15952533800 | 92801 |
| 93105 | 18626221249 | 姚春峰 | 18626221249 | 93078 |
| 93133 | 19352900319 | 193****0319 | 19352900319 | 93011 |
| 93138 | 18952533228 | 189****3228 | 18952533228 | 93011 |
| 93146 | 15252502175 | 艾保兄 | 15252502175 | 93011 |
| 93148 | 13601446282 | 许梅 | 13601446282 | 93011 |
建议处理方式:
```sql
UPDATE wa_users
SET pid = 0
WHERE pid IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
AND id NOT IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
UPDATE eb_user
SET spread_uid = 0, spread_time = NULL
WHERE spread_uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
AND uid NOT IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
```
如业务要求保留推荐关系,需要先确认新的承接上级 ID再把上面 SQL 的 `0` 替换为指定 ID。
## 执行前校验 SQL
```sql
SELECT 'wa_users', COUNT(*) FROM wa_users WHERE id IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'eb_user', COUNT(*) FROM eb_user WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'wa_merchandise', COUNT(*) FROM wa_merchandise WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'wa_order_seller_or_buyer', COUNT(*) FROM wa_order WHERE seller_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users) OR buyer_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'wa_selfbonus_log', COUNT(*) FROM wa_selfbonus_log WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'wa_sharebonus_log', COUNT(*) FROM wa_sharebonus_log WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'wa_coupon_log', COUNT(*) FROM wa_coupon_log WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'wa_withdraw', COUNT(*) FROM wa_withdraw WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'wa_address', COUNT(*) FROM wa_address WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'wa_alipay', COUNT(*) FROM wa_alipay WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'wa_bank', COUNT(*) FROM wa_bank WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'eb_user_integral_record', COUNT(*) FROM eb_user_integral_record WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'eb_user_address', COUNT(*) FROM eb_user_address WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'eb_user_bill', COUNT(*) FROM eb_user_bill WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'eb_user_experience_record', COUNT(*) FROM eb_user_experience_record WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'eb_user_visit_record', COUNT(*) FROM eb_user_visit_record WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'eb_store_order', COUNT(*) FROM eb_store_order WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
```
## 备份方案
执行删除前,先在同库创建带日期后缀的备份表。备份表名建议固定使用本次任务时间戳:`20260604`
```sql
CREATE TABLE IF NOT EXISTS bak_20260604_bsy_wa_users AS
SELECT * FROM wa_users WHERE id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
CREATE TABLE IF NOT EXISTS bak_20260604_bsy_eb_user AS
SELECT * FROM eb_user WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
CREATE TABLE IF NOT EXISTS bak_20260604_bsy_wa_merchandise AS
SELECT * FROM wa_merchandise WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
CREATE TABLE IF NOT EXISTS bak_20260604_bsy_wa_order AS
SELECT * FROM wa_order
WHERE seller_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
OR buyer_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
CREATE TABLE IF NOT EXISTS bak_20260604_bsy_wa_selfbonus_log AS
SELECT * FROM wa_selfbonus_log WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
CREATE TABLE IF NOT EXISTS bak_20260604_bsy_wa_sharebonus_log AS
SELECT * FROM wa_sharebonus_log WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
CREATE TABLE IF NOT EXISTS bak_20260604_bsy_wa_coupon_log AS
SELECT * FROM wa_coupon_log WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
CREATE TABLE IF NOT EXISTS bak_20260604_bsy_wa_withdraw AS
SELECT * FROM wa_withdraw WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
CREATE TABLE IF NOT EXISTS bak_20260604_bsy_wa_address AS
SELECT * FROM wa_address WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
CREATE TABLE IF NOT EXISTS bak_20260604_bsy_wa_alipay AS
SELECT * FROM wa_alipay WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
CREATE TABLE IF NOT EXISTS bak_20260604_bsy_wa_bank AS
SELECT * FROM wa_bank WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
CREATE TABLE IF NOT EXISTS bak_20260604_bsy_eb_user_integral_record AS
SELECT * FROM eb_user_integral_record WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
CREATE TABLE IF NOT EXISTS bak_20260604_bsy_eb_user_address AS
SELECT * FROM eb_user_address WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
CREATE TABLE IF NOT EXISTS bak_20260604_bsy_eb_user_bill AS
SELECT * FROM eb_user_bill WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
CREATE TABLE IF NOT EXISTS bak_20260604_bsy_eb_user_experience_record AS
SELECT * FROM eb_user_experience_record WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
CREATE TABLE IF NOT EXISTS bak_20260604_bsy_eb_user_visit_record AS
SELECT * FROM eb_user_visit_record WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
CREATE TABLE IF NOT EXISTS bak_20260604_bsy_eb_store_order AS
SELECT * FROM eb_store_order WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
```
## 删除执行方案
建议用事务执行;执行前确认业务低峰,并暂停相关同步任务或后台定时任务。
```sql
START TRANSACTION;
-- 1. 先解除删除名单外用户对待删用户的推荐引用
UPDATE wa_users
SET pid = 0
WHERE pid IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
AND id NOT IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
UPDATE eb_user
SET spread_uid = 0, spread_time = NULL
WHERE spread_uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
AND uid NOT IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
-- 2. 删除寄卖业务关联数据
DELETE FROM wa_order
WHERE seller_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
OR buyer_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM wa_merchandise
WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM wa_selfbonus_log
WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM wa_sharebonus_log
WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM wa_coupon_log
WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM wa_withdraw
WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM wa_money_log
WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM wa_address
WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM wa_alipay
WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM wa_bank
WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
-- 3. 删除积分商城用户关联数据
DELETE FROM eb_user_integral_record
WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM eb_user_address
WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM eb_user_bill
WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM eb_user_brokerage_record
WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM eb_user_experience_record
WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM eb_user_extract
WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM eb_user_level
WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM eb_user_recharge
WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM eb_user_sign
WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM eb_user_token
WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM eb_user_visit_record
WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM eb_store_cart
WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM eb_store_coupon_user
WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM eb_store_order
WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM eb_sms_record
WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
-- 4. 最后删除用户主表
DELETE FROM eb_user
WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
DELETE FROM wa_users
WHERE id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
-- 5. 事务内复核,确认结果符合预期后再提交
SELECT 'wa_users_remaining', COUNT(*) FROM wa_users WHERE id IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'eb_user_remaining', COUNT(*) FROM eb_user WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'wa_merchandise_remaining', COUNT(*) FROM wa_merchandise WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'wa_order_remaining', COUNT(*) FROM wa_order WHERE seller_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users) OR buyer_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'wa_selfbonus_log_remaining', COUNT(*) FROM wa_selfbonus_log WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'wa_sharebonus_log_remaining', COUNT(*) FROM wa_sharebonus_log WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'wa_coupon_log_remaining', COUNT(*) FROM wa_coupon_log WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'eb_user_integral_record_remaining', COUNT(*) FROM eb_user_integral_record WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'external_wa_pid_refs_remaining', COUNT(*) FROM wa_users WHERE pid IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
UNION ALL SELECT 'external_eb_spread_refs_remaining', COUNT(*) FROM eb_user WHERE spread_uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
-- 确认无误后:
COMMIT;
-- 如结果异常:
-- ROLLBACK;
```
## 执行后复核
```sql
SELECT COUNT(*) AS wa_users_remaining
FROM wa_users
WHERE id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
SELECT COUNT(*) AS eb_user_remaining
FROM eb_user
WHERE uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
SELECT COUNT(*) AS merchandise_remaining
FROM wa_merchandise
WHERE user_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
SELECT COUNT(*) AS order_remaining
FROM wa_order
WHERE seller_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users)
OR buyer_id IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
SELECT COUNT(*) AS wa_pid_refs_remaining
FROM wa_users
WHERE pid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
SELECT COUNT(*) AS eb_spread_refs_remaining
FROM eb_user
WHERE spread_uid IN (SELECT id FROM tmp_bosenyuan_cleanup_users);
```
## 回滚思路
如果已经 `COMMIT`,只能通过备份表恢复。恢复时应优先恢复用户主表,再恢复关联表:
1. `wa_users`
2. `eb_user`
3. `wa_*` 业务表
4. `eb_user_*` / `eb_store_*` 关联表
示例:
```sql
INSERT INTO wa_users
SELECT * FROM bak_20260604_bsy_wa_users;
INSERT INTO eb_user
SELECT * FROM bak_20260604_bsy_eb_user;
```
恢复前需要先确认目标主键是否已经被重新占用。
## 注意事项
- 本文档仅为清理方案,尚未执行删除。
- `wa_merchandise` 中手工补充名单此前核查到的 35 条未售商品均为隐藏状态:`status = 1``is_show = 0`
- `wa_order` 删除条件必须同时覆盖 `seller_id``buyer_id`
- 删除主表前必须先处理名单外用户对待删用户的 `pid` / `spread_uid` 引用。
- 执行完成后,如系统使用 Redis 缓存用户、配置或统计数据,需要按线上运维流程清理相关缓存或重启服务。
## 执行结果
- 执行时间2026-06-04
- 执行库:`miao80 / yangtangyoupin`
- 清理 ID 表:`bak_20260604_bsy_cleanup_users`
- 清理用户数75
- 状态:已执行并 `COMMIT`
### 备份表实际行数
| 备份表 | 行数 |
| --- | ---: |
| `bak_20260604_bsy_cleanup_users` | 75 |
| `bak_20260604_bsy_wa_users` | 75 |
| `bak_20260604_bsy_eb_user` | 74 |
| `bak_20260604_bsy_wa_merchandise` | 1698 |
| `bak_20260604_bsy_wa_order` | 2609 |
| `bak_20260604_bsy_wa_selfbonus_log` | 1627 |
| `bak_20260604_bsy_wa_sharebonus_log` | 1545 |
| `bak_20260604_bsy_wa_coupon_log` | 198 |
| `bak_20260604_bsy_wa_withdraw` | 44 |
| `bak_20260604_bsy_wa_address` | 80 |
| `bak_20260604_bsy_wa_alipay` | 65 |
| `bak_20260604_bsy_wa_bank` | 1 |
| `bak_20260604_bsy_wa_money_log` | 0 |
| `bak_20260604_bsy_eb_user_integral_record` | 1666 |
| `bak_20260604_bsy_eb_user_address` | 73 |
| `bak_20260604_bsy_eb_user_bill` | 47 |
| `bak_20260604_bsy_eb_user_brokerage_record` | 0 |
| `bak_20260604_bsy_eb_user_experience_record` | 47 |
| `bak_20260604_bsy_eb_user_extract` | 0 |
| `bak_20260604_bsy_eb_user_level` | 0 |
| `bak_20260604_bsy_eb_user_recharge` | 0 |
| `bak_20260604_bsy_eb_user_sign` | 0 |
| `bak_20260604_bsy_eb_user_token` | 0 |
| `bak_20260604_bsy_eb_user_visit_record` | 12 |
| `bak_20260604_bsy_eb_store_cart` | 0 |
| `bak_20260604_bsy_eb_store_coupon_user` | 0 |
| `bak_20260604_bsy_eb_store_order` | 47 |
| `bak_20260604_bsy_eb_sms_record` | 0 |
### 独立复核结果
| 复核项 | 剩余行数 |
| --- | ---: |
| `wa_users` | 0 |
| `eb_user` | 0 |
| `wa_merchandise` | 0 |
| `wa_order` seller 或 buyer 命中 | 0 |
| `wa_selfbonus_log` | 0 |
| `wa_sharebonus_log` | 0 |
| `wa_coupon_log` | 0 |
| `wa_withdraw` | 0 |
| `wa_address` | 0 |
| `wa_alipay` | 0 |
| `wa_bank` | 0 |
| `eb_user_integral_record` | 0 |
| `eb_user_address` | 0 |
| `eb_user_bill` | 0 |
| `eb_user_experience_record` | 0 |
| `eb_user_visit_record` | 0 |
| `eb_store_order` | 0 |
| 删除名单外 `wa_users.pid` 指向待删用户 | 0 |
| 删除名单外 `eb_user.spread_uid` 指向待删用户 | 0 |
说明:`information_schema.TABLES.TABLE_ROWS` 对 InnoDB 表可能是估算值;本节备份行数以执行时 `COUNT(*)` 输出为准。