From e181d65295d66e25e160ae5652dff55712937aee Mon Sep 17 00:00:00 2001 From: danaisuiyuan Date: Mon, 27 Apr 2026 19:05:24 +0800 Subject: [PATCH] =?UTF-8?q?by80:=20=E8=A7=84=E8=8C=83=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=8C=83=E5=9B=B4=E5=88=A0=E9=99=A4=E9=9C=80=E6=B1=82=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 BYBSY80 数据删除需求升级为可复用的标准处理方案,补充执行边界、全库字段扫描、删除顺序、校验规则和结果输出要求。 Made-with: Cursor --- docs/com-bybsy80-data-imgration-del.md | 217 +++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 docs/com-bybsy80-data-imgration-del.md diff --git a/docs/com-bybsy80-data-imgration-del.md b/docs/com-bybsy80-data-imgration-del.md new file mode 100644 index 0000000..fa2f121 --- /dev/null +++ b/docs/com-bybsy80-data-imgration-del.md @@ -0,0 +1,217 @@ + +# 公司名称:宝应博森元 + +## mysql数据库配置信息 + +host ip: 123.56.214.80 +datasource: + name: yangtangyoupin + username: yangtangyoupin + password: 5Fn8eWrbYFtAhCZw + +--- + +## 数据删除任务 + +- **用户id数据范围**: +93257 +93255 +93247 +93246 +93245 +93244 +93243 +93242 +93240 +93237 +93236 +93235 +93234 +93232 +93231 +93230 +93229 +93227 +93226 +93225 +93224 +93223 +93222 +93221 +93220 +93219 +93215 +93210 +93209 +93208 +93206 +93205 +93204 +93203 +93202 +93201 +93199 +93198 +93197 +93196 +93195 +93191 +93188 +93181 +93180 +93178 +93176 +93175 +93174 +93173 +93172 +93165 +93162 +93158 +93154 +93151 +93149 +93141 +93099 +93098 +93096 +93095 +93079 +93076 +93063 +93041 +93003 +93001 +92959 +92951 +92885 +92884 +92880 +92850 +92792 +92754 +92671 +91757 + +--- + +## 需求目标 + +删除数据库中“用户id数据范围”内用户在所有相关表中的业务数据,保留不在该范围内的其他用户及其业务数据。 + +本文件可作为后续同类“按用户范围删除数据”需求的标准处理方案文档。执行时只需替换公司信息、数据库连接信息和用户 ID 范围。 + +## 执行边界 + +- **删除方向**:删除用户 ID 范围内的数据,保留范围外数据。 +- **表范围**:不只处理显式列出的表,需要扫描目标库所有表结构,找出用户关联字段后统一处理。 +- **字段范围**:重点处理以下用户关联字段: + - `uid` + - `user_id` + - `seller_id` + - `buyer_id` + - `out_user_id` + - `bargain_user_id` + - `pay_uid` + - 其他明确表示用户 ID 的字段 +- **核心用户表**: + - `wa_users.id` + - `eb_user.uid` +- **特殊字段边界**: + - `eb_user.spread_uid` 表示“当前用户的推荐人”。 + - 当 `spread_uid` 命中待删除用户 ID 时,不删除这些范围外用户,也不默认清空该字段。 + - `spread_uid` 仅作为预检报告项,除非需求另行明确要求处理。 + +## 预检要求 + +执行删除前必须先做只读预检: + +1. 确认连接的数据库为目标库 `yangtangyoupin`。 +2. 扫描 `INFORMATION_SCHEMA.COLUMNS`,找出所有用户关联字段。 +3. 对每个命中的表字段统计目标用户 ID 的命中行数。 +4. 单独报告 `eb_user.spread_uid` 命中数量,但不纳入删除范围。 +5. 输出清理前基线统计,作为最终删除数量核对依据。 + +参考字段扫描范围: + +```sql +SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE +FROM INFORMATION_SCHEMA.COLUMNS +WHERE TABLE_SCHEMA = DATABASE() + AND ( + COLUMN_NAME IN ( + 'uid', + 'user_id', + 'seller_id', + 'buyer_id', + 'out_user_id', + 'bargain_user_id', + 'pay_uid', + 'spread_uid' + ) + OR COLUMN_NAME LIKE '%user%' + OR COLUMN_NAME LIKE '%uid%' + OR COLUMN_NAME LIKE '%seller%' + OR COLUMN_NAME LIKE '%buyer%' + ) +ORDER BY TABLE_NAME, COLUMN_NAME; +``` + +## 删除规则 + +### `wa_*` 相关表 + +删除用户 ID 范围内的相关记录: + +- `wa_users`:删除 `id` 在用户 ID 范围内的记录。 +- `wa_order`:删除 `seller_id` 或 `buyer_id` 在用户 ID 范围内的订单。同一订单只删除一次。 +- `wa_merchandise`:删除 `user_id` 在用户 ID 范围内的寄售商品。 +- `wa_selfbonus_log`:删除 `user_id` 在用户 ID 范围内的记录。 +- `wa_sharebonus_log`:删除 `user_id` 在用户 ID 范围内的记录。 +- `wa_coupon_log`:删除 `user_id` 在用户 ID 范围内的记录。 +- `wa_address`、`wa_alipay`、`wa_bank`、`wa_money_log`、`wa_withdraw` 等存在 `user_id` 字段的表:删除 `user_id` 在用户 ID 范围内的记录。 + +### `eb_*` 相关表 + +删除用户 ID 范围内的相关记录: + +- `eb_user`:删除 `uid` 在用户 ID 范围内的记录。 +- `eb_user_integral_record`:删除 `uid` 在用户 ID 范围内的记录。 +- `eb_user_address`、`eb_user_bill`、`eb_user_brokerage_record`、`eb_user_experience_record`、`eb_user_extract`、`eb_user_level`、`eb_user_recharge`、`eb_user_sign`、`eb_user_token`、`eb_user_visit_record` 等存在 `uid` 字段的用户表:删除 `uid` 在用户 ID 范围内的记录。 +- `eb_store_order`、`eb_store_cart`、`eb_store_coupon_user`、`eb_store_pink`、`eb_store_product_log`、`eb_store_product_relation`、`eb_store_product_reply` 等存在 `uid` / `pay_uid` / `bargain_user_id` 的业务表:删除相关字段在用户 ID 范围内的记录。 +- `eb_pay_component_order.out_user_id` 等明确表示用户 ID 的字段:删除字段值在用户 ID 范围内的记录。 + +### 其他相关表 + +- `t_platform_account.user_id` 等非 `wa_*` / `eb_*` 表:如字段语义明确为用户 ID,删除字段值在用户 ID 范围内的记录。 +- 仅字段名包含 `username`、`user_phone`、`user_address` 等非用户 ID 语义字段时,不按用户 ID 范围删除。 + +## 执行顺序 + +1. 先删除业务子表和日志表数据。 +2. 再删除订单、商品、积分、账单、访问记录等用户关联数据。 +3. 最后删除核心用户表: + - `wa_users WHERE id IN (...)` + - `eb_user WHERE uid IN (...)` +4. 不处理 `eb_user.spread_uid IN (...)` 的范围外用户。 + +## 校验要求 + +删除完成后必须逐表校验: + +- 所有纳入删除范围的 `uid`、`user_id`、`seller_id`、`buyer_id`、`out_user_id`、`bargain_user_id`、`pay_uid` 等字段,对目标用户 ID 的命中数应为 `0`。 +- `wa_users.id` 在目标用户 ID 范围内的记录数应为 `0`。 +- `eb_user.uid` 在目标用户 ID 范围内的记录数应为 `0`。 +- `wa_order` 中 `seller_id` 或 `buyer_id` 在目标用户 ID 范围内的记录数应为 `0`。 +- `eb_user.spread_uid` 命中范围内 ID 的记录可以继续存在,作为保留边界说明输出。 + +## 输出要求 + +执行完成后输出以下结果: + +- 每张表清理前命中数。 +- 每张表实际删除数。 +- 每张表清理后剩余命中数。 +- `eb_user.spread_uid` 的保留说明。 +- 最终结论:是否所有纳入删除范围的相关数据均已清零。 +