ALTER TABLE commission ADD UNIQUE KEY uk_order(order_no); DELETE FROM commission WHERE biz_date = '2026-11-07'; INSERT INTO commission SELECT ... ON DUPLICATE KEY UPDATE amount = VALUES(amount);
给三天的订单补算佣金 脚本中途报错重跑了一遍 佣金表里同一批订单出现两条记录 财务对账差额直接翻倍。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,脚本是纯 insert 既没有唯一约束 也没有先清后写 重跑等于再写一遍 中途失败就变成写了一半再补另一半 没有一处能挡住重复写入。
围绕「补数据脚本幂等」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
处理上按这个顺序:给业务主键加唯一索引 让重复插入直接失败报错;改成按批次先删后插 或者用冲突时更新覆盖旧值;重跑前先跑一次对账查询 确认条数和金额都一致。
改完只确认一件事:同一批次重跑三次 佣金条数和金额都不变 唯一键没有报冲突。
