对于唯一映射键的某些部分,使用ON DUPLICATE KEY UPDATE

时间:2012-11-10 07:56:24

标签: mysql on-duplicate-key

我有如下表所示的表格

   ItemAttMapID    ItemAttributeID    VendorID    vItemID    Qty
        1                4               1           2       60
        2                4               2           3       10
        3                3               5           5       20

在此表中,ItemAttMapIDauto_increment primary_key

ItemAttributeID, VendorID, VItemIDUnique Mapping

我使用了以下查询

INSERT INTO `client`.`mapping`  
(`ItemAttMapID`, `ItemAttributeID`, `VendorID`, `vItemID`, `Qty`)  

VALUES  
(NULL, 4, '2', '3', '70'),  
(NULL, 3, '5', '5', '80')  
ON DUPLICATE KEY UPDATE Qty = VALUES(Qty);

它给了我想要的正确结果 但是当我使用以下查询而不是更新特定记录时,它会插入新的。

INSERT INTO `client`.`mapping`  
(`ItemAttMapID`, `ItemAttributeID`, `VendorID`, `vItemID`, `Qty`)  

VALUES  
(NULL, 2, '5', '5', '80')  
ON DUPLICATE KEY UPDATE Qty = VALUES(Qty);

表中的更改就像这样

   ItemAttMapID    ItemAttributeID    VendorID    vItemID    Qty
        1                4               1           2       60
        2                4               2           3       10
        3                3               5           5       20
        4                2               5           5       80  

我想要更新第3个数字行,但它正在向表中插入新记录。

如何使用ON DUPLICATE KEY UPDATE实现此目的。

修改

我想仅检查,如果VendorIDvItemID已经存在,则使用ON DUPLICATE KEY UPDATE更新记录(不是ItemAttributeID)。

因为如果我在查询中将ItemAttributeIDVendorIDvItemID放在一起,那么它会更新记录,否则会插入新记录。

0 个答案:

没有答案