错误文本本身信息有限,真正有用的是异常中的表名、索引名和Duplicate entry值。先完整保存异常SQL,不要看到1062就随机删除记录。

SELECT entity_id, attribute_id, store_id, COUNT(*) c FROM catalog_product_entity_varchar GROUP BY entity_id, attribute_id, store_id HAVING c > 1;
阶段检查内容
定位冲突在商品主表时检查序列和迁移数据;冲突在EAV值表时检查entity、attribute、store组合;冲突在媒体表时检查图片关联是否被重复插入。
验证若数据库没有历史重复行,检查自定义Observer是否在一次请求里再次调用商品保存。修正递归保存后,用新商品、旧商品和含图片商品分别验证。

避免误判

测试时固定同一个Store、客户状态和输入数据,并记录修改前后的请求与数据库结果,避免把作用域差异当成随机故障。