【发布时间】:2017-10-05 23:40:14
【问题描述】:
我正在开发一个带有 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 中手动工作,但我有太多行无法手动更新,所以想知道发生了什么。
【问题讨论】:
-
你应该知道
INSERT是新建一行数据。UPDATE是更改现有数据行的值。因此,当您使用 INSERT 更新现有行时,显然会出现“重复条目”错误。另外,当您的问题完全与 MySQL 相关时,请不要标记 PHP。 -
是的;我知道。但是从我读到的 MySql 中,如果这个键已经存在,那么我们应该更新。问题是更新功能似乎不起作用;尽管仅针对其中一条错误行运行它确实有效。
-
@rl279 - 只需删除;在
ON DUPLICATE之前尝试..!
标签: mysql