Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 重复更新时插入,始终插入_Mysql - Fatal编程技术网

Mysql 重复更新时插入,始终插入

Mysql 重复更新时插入,始终插入,mysql,Mysql,我有下一个问题: 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 userI

我有下一个问题:

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,我不知道这是否是问题…如果有人对我有一个答案,谢谢。

< P>为了使<代码>重复的键动作发生,MySQL需要知道它试图插入一个你认为是唯一的列的副本。这不仅仅涉及<代码>主键< /代码>,而是您认为唯一的任何组合。由于您担心
userID、plateType和groupVal的组合是唯一的,因此为这三列创建一个复合索引。然后,您的
插入到重复键上的…UDPATE
应能正常工作

这将向现有表中添加正确的唯一索引。当在
INSERT
上找到列的组合时,MySQL将改为在重复键上执行
操作

ALTER TABLE `tableA` ADD UNIQUE KEY `idx_user_plate_group` (`userID`, `plateType`, `groupVal`);

在要插入的列中,您希望哪一列是唯一的?您说过
TableA.id
是主键,自动递增,但您没有直接插入它。您是否希望
userID
也是唯一的?哪一列决定了行是否已经存在?只是TableA.id是唯一的,我不会直接插入它,因为它会自动递增,但是如果这种方法错误,请在插入时随时更正meSo,您希望在重复键上触发
?什么构成唯一行?是的,我知道我没有指定哪个值触发重复键,这就是我感到困惑的地方,使行唯一的值是userID、plateType和groupVal的组合。但仅仅是组合,我的意思是,userdID将重复尽可能多的次数,它可以与plateType和groupVal组合…我希望我说清楚了。顺便说一下,谢谢你抽出时间是的,现在可以理解了。您需要为这些列创建一个唯一的索引--请稍候,我将在下面给出完整的答案。关于这一点的最后一个问题,这意味着必须删除我以前的主键,我的意思是我称之为id的主键,它是自动递增的。@emc不,您不需要删除它。您可能不需要它,但也不需要删除它。如果它在其他表中用作外键,您将需要它,否则将其保留在适当位置是无害的。当MySQL对复制键执行
操作时,它会检查需要唯一的任何索引的复制,而不仅仅是PK。您可以有多个定义的唯一索引。@emc如果您不打算在其他地方使用自动递增id作为外键,您可以首先将这三列定义为复合主键,但是这个新的独特索引也可以。非常感谢你的帮助@Michael Berkowski,感谢你花时间帮助一个完全陌生的人……我很感激,希望有一天我能帮助你。注意。出现了另一个问题,我将提出另一个问题,这样如果你想回答,它会给你更多的分数…我猜会给你更多的分数,我是这方面的新手,所以我不知道评分是如何工作的。主题是:基数冲突:1242子查询返回超过1行,以防你感兴趣。