2014-12-06 110 views
1

我有一个游戏更新时间表,其中列是唯一的以避免重复。关于重复密钥问题

我的问题是如下:如何只更新一个特定的列,并避免插入一个新的行,如果他们是相同的?

这是query

我这样做的代码,它仍然进入一个新行仅更新Time柱:

INSERT INTO `leaderboard` (`Persona`, `Level`, `Track`, `Car`, `Mode`, `Time`, 
          `Date`, `Timestamp`, `HMS`) 
          VALUES ('STIG', 80, 'SPA FRANCORCHAMPS', 
            'AUDI R8 LMS ULTRA', 'HD', '02:17.332', 
            '2014-12-06', '1417825487', '1:24:47') 
ON DUPLICATE KEY UPDATE `Time` = '02:17.332'; 

回答

1

你实际上是在创建一个复合unique键:

ALTER TABLE `leaderboard` 
ADD UNIQUE KEY `Persona` (`Persona`,`Level`,`Track`,`Car`,`Mode`,`Time`,`Date`,`Timestamp`,`HMS`); 

这意味着,元组(Persona, Level, Track, Car, Mode, Time, Date, Timestamp, HMS)将是唯一的。但是,时间列将被更新,并且很可能它们不会是唯一的。

也许你想要做的是:

ALTER TABLE `leaderboard` 
ADD UNIQUE KEY `Persona` (`Persona`,`Level`,`Track`,`Mode`); 
+0

嗯会看看怎么回事,我已经做了一切他们唯一的一个原因。 – Lion 2014-12-06 11:44:51

+1

好的问题是现在的水平,就像在这个例子中,你可以看到,http://sqlfiddle.com/#!2/27115/1/0让我们说他是79级,做了一段时间,他在80级另一次插入一个新的行仍然...但我已经修复它自己http://sqlfiddle.com/#!2/83ce97/1 – Lion 2014-12-06 11:59:41

+0

@Lion:你应该编辑你的问题,所以你的目标是更清晰的其他用户也是如此。结果我会改善我的答案。 – 2014-12-06 12:10:58