示例成品 · 平台演示,按左边这组点选真跑出来的
示例:线上数据错乱排查表
现象:用户余额与流水合计对不上,波及跨表。涉及表:账户表、流水表。关键字段:user_id、balance、amount。
一、可疑链路
| 链路 | 可疑点 | 排查优先级 |
| 下单扣款 | 扣款成功但流水未写 | 高 |
| 退款入账 | 退款写流水但余额未加 | 高 |
| 定时对账 | 对账任务重复执行 | 中 |
| 消息重试 | 重试导致重复入账 | 中 |
二、数据校验 SQL
1. 余额与流水合计差异:
SELECT a.user_id, a.balance, SUM(f.amount) AS flow_sum
FROM account a LEFT JOIN flow f ON a.user_id=f.user_id
GROUP BY a.user_id, a.balance
HAVING a.balance <> SUM(f.amount);
2. 重复流水:
SELECT user_id, order_no, COUNT(*) FROM flow GROUP BY user_id, order_no HAVING COUNT(*)>1;
3. 空值检查:
SELECT * FROM flow WHERE amount IS NULL OR user_id IS NULL;
三、修复脚本草稿
-- 按差异补流水(需先备份)
UPDATE flow SET amount = (SELECT balance FROM account WHERE account.user_id=flow.user_id)
WHERE user_id IN (SELECT user_id FROM tmp_diff);
-- 重复流水标记
UPDATE flow SET status='待冲正' WHERE id IN (SELECT id FROM tmp_dup);
四、影响统计
受影响记录数 = 差异用户数 + 重复流水条数;影响占比 = 受影响记录数 ÷ 涉及总条数 × 100%。示例:差异 12 条、重复 5 条,总 2000 条,占比约 0.85%。
五、处理建议
先只读校验、备份差异表,再灰度执行修复脚本,最后复跑校验 SQL 确认归零。结论由持证人员核对后才能用。
点左边「开工 · 直接出成品」,出一份你自己的版本(文字免费)