2016-02-07 113 views
-3

我的MySQL表有點問題。MySQL如何避免重複行

這裏是如何看我的db表:

enter image description here

如何避免重複行,我想在添加新的插件如果列「DOC」和「日期」有相同的價值觀只需更換呢?

enter image description here

enter image description here

我會很感激,如果有人能幫助我。提前致謝。

+0

你是什麼意思「只要更換它們」? –

+0

如果'doc'和'date'列具有相同的值,則不需要執行任何操作。在該表中只有3列,唯一的是'id' – RiggsFolly

+0

@RiggsFolly我在帖子中添加新圖片。我希望這會清除我的問題。 – diank

回答

2

添加一個唯一索引的文檔和日期列,然後重複更新

INSERT INTO mytable (id, doc, date) 
values ('id','doc','date') 
on duplicate key update date = 'date' 

或任何你需要使用。您可以指定多個列,如...

on duplicate key update date = 'date, doc = 'doc', etc... 

編輯

如果doc和日期都沒有鑰匙,你不想對他們的指數,我認爲唯一的辦法就是拉首先進行查詢,看看是否有一行存在與文檔和日期都等於您的新的文檔和日期值。如果行存在,則更新它 - 如果不存在,則插入新行。

+0

不是他所要求的__'if列'doc'和'date'具有相同的值'___他們不是密鑰 – RiggsFolly

+0

我想如果我有'doc':528和'date':30/09/2015但是無法添加'doc':528和'date':30/09/2015(帶有diff。id),但我可以添加'doc':529和'date':30/09/2015或'doc ':528和'日期':29/09/2015。 – diank

0

如果您想要插入表中,並且表使用AI作爲主鍵,而您沒有明確地創建一個,那麼您將始終進行重複。

「ON DUPLICATE KEY」功能無法擴展到「ON DUPLICATE FIELD」功能。

菲爾說,你唯一真正的解決方案就是改變代碼。做類似:

SELECT id 
FROM mytable 
WHERE doc = '$doc' AND 
date = '$date' 

然後,如果有任何結果,您可以使用顯式ID做插入,或者你可以忽略它。

INSERT INTO mytable (id, doc, date) 
values ('$id','$doc','$date')