我看到很多人都問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