我有如下所示的表格
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
我想要更新第三个数字行,但它正在向表中插入一条新记录。
如何使用 ON DUPLICATE KEY UPDATE 来实现这一点。
编辑:
我只想检查,如果VendorID
并且vItemID
已经存在,然后ItemAttributeID
使用 ON DUPLICATE KEY UPDATE 更新记录( NOT THE )。
因为如果我将ItemAttributeID
相同的内容放在VendorID
和vItemID
查询中,那么它会更新记录,否则它会插入新记录。