用户注销后账号登不上,用同一个手机号再注册,历史订单照样出现在个人中心,收件人姓名和详细地址一个都没少,客服也解释不清。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

UPDATE orders SET phone = 'deleted', addr = '' WHERE uid = ?;
DELETE FROM addresses WHERE uid = ?;
DELETE FROM users WHERE id = ?;

注销逻辑只清了主表那一行,订单和地址簿靠外键关联却没设级联,数据仍在。手机号是业务里常用的查询键,删了主表也拦不住关联查询。这一点先确认清楚,后面就不用反复试。

「注销数据残留」这类改动最怕改一半,回滚脚本先准备好,再动生产。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

具体做法是,把所有含 uid 的表列一遍,逐张确认是删除还是匿名化,别只看主表;订单这类需要留存的记录做匿名化,手机号和地址替换成占位值;注销完成后用同一手机号再搜一次全库,确认原始值查不到。

改完照着核一遍,注销后再用原手机号搜全库,只剩脱敏占位值,个人中心也查不到历史订单。

作者 9823189