2014-12-06 97 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