| 123456789101112131415161718192021222324252627282930 |
- -- ============================================================================
- -- t_device_inventory 去重 + 添加唯一约束
- --
- -- 背景:同一设备同一商品存在多条记录,原因是:
- -- 1. ReplenishmentOrderServiceImpl.completeOrder 用 productCode 查重,
- -- 与其他路径(用 productId)不一致
- -- 2. 数据库层缺少 (device_id, product_id) 唯一约束,并发场景下查重失效
- --
- -- 执行前建议:先 SELECT 确认重复数据量
- -- SELECT device_id, product_id, COUNT(*) cnt FROM t_device_inventory
- -- WHERE product_id IS NOT NULL GROUP BY device_id, product_id HAVING cnt > 1;
- -- ============================================================================
- -- Step 1: 清理重复记录
- -- 策略:每组 (device_id, product_id) 保留 id 最大的那条(最新插入的),删除其余
- DELETE FROM t_device_inventory
- WHERE id NOT IN (
- SELECT max_id FROM (
- SELECT MAX(id) AS max_id
- FROM t_device_inventory
- WHERE product_id IS NOT NULL
- GROUP BY device_id, product_id
- ) AS kept
- )
- AND product_id IS NOT NULL;
- -- Step 2: 添加唯一约束,从根本上杜绝重复
- -- 如果该约束已存在会报错 Duplicate key name,这是预期行为
- ALTER TABLE t_device_inventory
- ADD UNIQUE KEY uk_device_product (device_id, product_id);
|