我有如下表所示的表格
ItemAttMapID ItemAttributeID VendorID vItemID Qty
1 4 1 2 60
2 4 2 3 10
3 3 5 5 20
在此表中,ItemAttMapID
为auto_increment
primary_key
且ItemAttributeID, VendorID, VItemID
为Unique 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实现此目的。
修改
我想仅检查,如果VendorID
和vItemID
已经存在,则使用ON DUPLICATE KEY UPDATE更新记录(不是ItemAttributeID
)。
因为如果我在查询中将ItemAttributeID
与VendorID
和vItemID
放在一起,那么它会更新记录,否则会插入新记录。