2017-06-29 31 views
0

我试图更新一个表与其他数据库的另一个表,我上次更新我创建了一个函数来保存一个产品中的多个类别,所以,当我运行旧脚本来更新我的表,一个约束错误出现。我了解情况以及为什么会发生这种情况,但我如何允许与重复数据表进行更新?有没有办法禁用约束?如何使用重复主键更新表?

我查询

UPDATE novourbano.oc_product_to_category oc 
INNER JOIN erp_product_category erp ON oc.product_id = erp.erp_productid 
SET oc.product_id = erp.erp_productid, 
oc.category_id = erp.erp_categoryid 
WHERE oc.product_id <> 0 

我尝试使用:

SET GLOBAL FOREIGN_KEY_CHECKS=0; 

但仍然没有工作。任何建议?提前致谢!

+0

主键必须是唯一的。您不能在同一个表中拥有相同主键的两行。关闭约束检查不会解决这个问题。您必须确保您不要尝试插入具有与现有行相同的主键的新行。 – Jesper

+0

那么,你不能有一个重复的主键。这是主键的属性之一。所以你需要生成一个在某种程度上没有不同的新密钥。 – Jaydee

+0

你必须在脑海中融合概念。主键是一回事,外键是另一回事。无论如何,你基本上都在问如何让两栋房子拥有相同的街道地址 - 为了什么? –

回答

1

如果表名称反映表目的的主键应该是

PRIMARY KEY(product_id, category_id)

为了避免像几行重复使用相同的product_idcategory_id

您可以使用IGNORE此更新:

UPDATE IGNORE novourbano.oc_product_to_category oc 
INNER JOIN erp_product_category erp ON oc.product_id = erp.erp_productid 
SET oc.product_id = erp.erp_productid, 
oc.category_id = erp.erp_categoryid 
+0

完美!谢谢! –