我看到很多人都问upserting(this,this,this,this,this,this和more甚至official doc)。插入到MySQL,但多列和唯一索引作为重复检查?
然而,新手不能很好地理解的东西是如何使用主键或唯一索引创建重复键。
我需要什么:
如果table1
独特的3列(attributeId, entityId, carId
)的组合在table2
副本,然后更新value
列。否则取table1
的行并将其插入table2
。
attributeId, entityId, carId
组合对每一行都是唯一的。
ie:如果一行有1,2,5
列,那么没有其他行会有1,2,5
。但另一行可能有5,1,2
或3,4,2
等
这里的困境是关于创建唯一索引。难道不足以就去做这样的:
CREATE INDEX PIndex ON table1 (attributeId, entityId, carId);
或者是有必要删除所有其他指标,然后创建这个索引,然后运行这样的查询? (以下伪代码):
INSERT INTO table1 (attributeId, entityId, carId, value, name)
VALUES (table2.attributeId,table2.entityId,table2.carId,table2.value,table2.name)
ON DUPLICATE KEY UPDATE value=VALUES(value);
的基本逻辑的存在:
如果在table2
一个行中,有一个相应行中table1
与恰好为属性Id,ENTITYID和carId相同的值,然后更新value
列的table1
,其中value
列的值为table2
。如果没有相应的行,则取行table2
并将其附加到table1
。
我的天啊。我很惊讶这是一个如此复杂的操作。完美的作品!非常感谢您花时间帮忙,spencer :) – Nav