我正在开发一个带有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中手动工作,但我有太多行要手动更新,所以我想知道发生了什么。
答案 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);