重复(唯一)键错误的MySql更新

时间:2017-10-05 23:40:15

标签: mysql

我正在开发一个带有MySql数据库的遗留php应用程序。

在应用程序中有一个包含以下内容的表:

CREATE TABLE IF NOT EXISTS `cards` (
    `score` smallint NOT NULL,
    `cardId` varchar(80) NOT NULL,
    `probability` DECIMAL(20,19),
    `autoTs` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    KEY `autoTs`    (`autoTs`),
    UNIQUE KEY `score_ cardId` (`score`, `cardId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

因此唯一ID是score_cardId,因为这些概率会随着时间的推移而改变。 现在我正在尝试将概率的新值插入到该数据库表中,我知道有唯一键但是我只是从MySql中得到相同的错误:

"Duplicate entry '600-cardKey1' for key 'score_ cardId'

这是我更新的代码;不知道我需要更改什么才能更新有重复唯一键的地方:

INSERT INTO cards 
  (score, cardId, probability) 
 VALUES 
(600, 'cardKey1', 0.773360594), 
(543, 'cardKey2', 0.770445253);
ON DUPLICATE KEY UPDATE score = VALUES(score), cardId = VALUES(cardId), probability = VALUES(probability);

有什么想法吗?我尝试了一些“ON DUPLICATE KEY UPDATE”的不同变体。这实际上是在SQL中手动工作,但我有太多行要手动更新,所以我想知道发生了什么。

2 个答案:

答案 0 :(得分:0)

由于您只想更新概率,请将语句更改为:

INSERT INTO cards(score, cardId, probability) 
VALUES (600, 'cardKey1', 0.773360594), (543, 'cardKey2', 0.770445253)
ON DUPLICATE KEY UPDATE probability = VALUES(probability);

答案 1 :(得分:0)

尝试删除;在ON DUPLICATE之前

INSERT INTO cards 
(score, cardId, probability) 
 VALUES 
(600, 'cardKey1', 0.773360594), 
(543, 'cardKey2', 0.770445253) ON DUPLICATE KEY 
UPDATE score = VALUES(score), cardId = 
VALUES(cardId), probability = VALUES(probability);