Mysql 重复密钥更新时插入…的PHPMyAdmin引发错误

Mysql 重复密钥更新时插入…的PHPMyAdmin引发错误,mysql,duplicates,key,Mysql,Duplicates,Key,在PHPMyAdmin SQL窗口中尝试以下MySQL时,抛出错误 INSERT INTO `stationlist`(`ID`, `Comd`, `Stn`, `Pin`, `Location`) VALUES (Null, 'aaa','bb',11,'ddd') ON DUPLICATE KEY UPDATE (Comd = 'abcd', Stn ='AFSB', Pin = 999, Location ='Delhi') 对于重复键上的和所有后续令

在PHPMyAdmin SQL窗口中尝试以下MySQL时,抛出错误

INSERT INTO `stationlist`(`ID`, `Comd`, `Stn`, `Pin`, `Location`) 
        VALUES (Null, 'aaa','bb',11,'ddd') 
        ON DUPLICATE KEY UPDATE (Comd = 'abcd', Stn ='AFSB', Pin = 999, Location ='Delhi')
对于重复键上的
和所有后续令牌,错误消息为
“Unrecognized keyword”


MySQL中不允许重复键上的
语句吗?

删除括号:

INSERT INTO `stationlist`(`ID`, `Comd_ID`, `Stn`, `Pin`, `Location`) 
VALUES (Null, 'aa','bb',11,'ddd') 
ON DUPLICATE KEY UPDATE `Comd_ID` = 'xxx', `Stn` ='AFSB', `Pin` = 999, `Location` ='Delhi'
此外,建议省略
自动递增
列,而不是将
NULL
传递给该列

INSERT INTO `stationlist`(`Comd_ID`, `Stn`, `Pin`, `Location`) 
VALUES ('aa','bb',11,'ddd') 
ON DUPLICATE KEY UPDATE `Comd_ID` = 'xxx', `Stn` ='AFSB', `Pin` = 999, `Location` ='Delhi'
注:

  • 我不知道你为什么要设置
    Comd\u ID='xxx'
    。如果您需要一些帮助来正确设置值,请编辑您的问题并解释您希望它是什么

  • 您试图避免重复哪些值?重复键更新时的
    子句用于具有唯一索引的列。通常,应该避免在具有多个唯一索引的表上使用
    ON DUPLICATE KEY UPDATE
    子句


我使用了另一种方法,使用SQL INSERT插入新记录,使用SQL UPDATE更新现有记录。

接下来的步骤
  • 删除括号:如果要运行此查询,则 工作但是将显示语法错误。例如:

    INSERT INTO stationlist (Comd,Stn,Pin,Location)
        VALUES ('aaa','bb',11,'ddd') ON DUPLICATE KEY
    
    UPDATE Comd = 'abcd'
        ,Stn = 'AFSB'
        ,Pin = 999
        ,Location = 'Delhi'
    
  • 我的问题如下:

    INSERT INTO dragdrop (id,TEXT,listorder)
        VALUES (7,'HTML',6) ON DUPLICATE KEY
    
    UPDATE TEXT = 'JSON' ,listorder = 7
    
  • 对于语法突出显示错误的参考,将对此进行跟踪


  • 有没有其他方法可以达到同样的效果?我是否可以使用
    Null
    主键的
    自动递增
    ID
    ?另外,
    ID
    是唯一唯一的索引。我使用的是PHPVer5.6.19。它不允许在重复键上使用SQL Pharse
    Comd_ID不是索引值而是字符串。您的注释意义不大。当然,
    Comd_ID
    不是索引值,而是列名。将其设置为xxx
    ,这很奇怪,但如果这是您想要的,那也没有错。这4列中哪一列有唯一的索引?我已经在原始帖子中提到,
    ID
    是唯一唯一的索引。不,这不是一个“笨拙的方法”。这是正确的方法。如果ID是唯一具有
    唯一
    索引的列,则重复键更新时的
    每次都会浪费一个自动递增的数字。不仅如此,在确定行是重复的键之前尝试插入该行,然后尝试更新,这是在浪费资源。在这种情况下,您的查询是错误的,在重复密钥更新上的
    之后的唯一内容应该是
    ID=ID+1