Mysql 重复密钥更新时插入…的PHPMyAdmin引发错误
在PHPMyAdmin SQL窗口中尝试以下MySQL时,抛出错误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') 对于重复键上的和所有后续令
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
。