我有下一个查询:
Insert into tableA (userID, switch, plateType, groupVal, brokeage)
Select 'UserB', switch, plateType, groupVal, brokeage from tableA where userID = 'UserA'
on duplicate key Update brokeage = (Select brokeage from tableA where userID = 'UserA')
tableA的主键是一个名为id的字段,它是唯一且自动递增的。 此查询的问题在于,当行已存在时,它始终插入而不是更新。我不在查询中使用id,我不知道这是不是问题...如果有人对我有答案,谢谢。
答案 0 :(得分:0)
为了进行ON DUPLICATE KEY
操作,MySQL需要知道它已尝试插入您认为唯一的列的副本。这不仅涉及PRIMARY KEY
,而且涉及您认为唯一的任何列组合。由于您担心userID, plateType, groupVal
的组合是唯一的,因此为这三列创建复合索引。然后,您的INSERT INTO...ON DUPLICATE KEY UDPATE
应该按预期工作。
这将为您现有的表添加正确的唯一索引。当在INSERT
上找到列组合时,MySQL将采取ON DUPLICATE KEY
操作。
ALTER TABLE `tableA` ADD UNIQUE KEY `idx_user_plate_group` (`userID`, `plateType`, `groupVal`);