Mysql 如何使用重复的主键更新表?

Mysql 如何使用重复的主键更新表?,mysql,Mysql,我试图用其他数据库的另一个表更新一个表,上次更新时我创建了一个函数,用于在一个产品中保存多个类别,因此,当我运行旧脚本更新我的表时,会出现一个约束错误。我了解这种情况以及发生这种情况的原因,但我如何允许使用具有重复数据的表进行更新?有没有办法禁用约束 我的查询 UPDATE novourbano.oc_product_to_category oc INNER JOIN erp_product_category erp ON oc.product_id = erp.erp_productid SE

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

我的查询

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

但仍然不起作用。有什么建议吗?谢谢,这是事先准备好的

如果表名反映了表的用途,则主键应为

主键(产品标识、类别标识)

为了避免重复,如多行具有相同的
产品id
类别id

您可以使用
忽略
进行此更新:

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

主键必须始终是唯一的。同一个表中不能有两行具有相同主键。关闭约束检查无法解决此问题。您必须确保不尝试插入与现有行主键相同的新行。嗯,您不能有重复的主键。这是主键的属性之一。因此,您需要生成一个新的密钥,该密钥在某些方面没有什么不同。您必须在头脑中混合概念。主键是一回事,外键是另一回事。不管怎样,你基本上是在问如何让两个房子有相同的街道地址,为什么?OpenCart系统用相同的主键注册两行到oc_product_to_category,我想创建一个“product_catedory_id”或类似的东西来转移约束错误。这会在将来制造麻烦吗?这不是OpenCart核心或您的定制中的一个bug吗?禁用数据完整性以让错误传播似乎不是未来的好选择。太好了!谢谢
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