diff --git a/docs/com-bosenyuan-miao80-data-cleanup-260604.md b/docs/com-bosenyuan-miao80-data-cleanup-260604.md new file mode 100644 index 0000000..7cc3d9b --- /dev/null +++ b/docs/com-bosenyuan-miao80-data-cleanup-260604.md @@ -0,0 +1,549 @@ +# 宝应博森元 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 + +- Excel:45 人 +- 手工补充: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(*)` 输出为准。