2015-06-24 51 views
0

我有一個表中有多個列。我有一個獨特的列,如果條目重複到此列我想要更新兩列,否則插入新行。我在php中使用單獨的函數,但爲了簡單起見,我將共享mysql代碼。在這種情況下col1是固定的。插入行如果col1不重複。但是,即使col1重複,這也會插入一個新行。 col4也可以爲空。所有的SO問題都沒有解決我的問題。mysql更新表列如果一個固定列是重複的

INSERT INTO table1 
    (col1, col2, col3, col4) 
VALUES 
    ('val1', 'val2', 'val3', 'val4') 
ON DUPLICATE KEY UPDATE 
    col2=VALUES(col2) 
    col3=VALUES(col3) 
+1

確認你確實在col1上有一個唯一的密鑰......除非唯一的密鑰被違反,否則你將永遠不會觸發重複的東西。 –

回答

1

它不工作,因爲你沒有對col1列定義的UNIQUE關鍵。每INSERT ... ON DUPLICATE KEY UPDATE Documentation如果在UNIQUE/PrimaryKey列中插入導致重複密鑰違規,則UPDATE會發生,而如果INSERT發生。

因此,在您的情況下,您必須通過在列上定義主鍵/唯一鍵約束來將col1作爲關鍵列;爲了讓它工作。

+0

這正是發生了什麼事。事實上,我沒有把col1設置爲一個獨特的約束。現在它在我做之後正在工作。謝謝你們的幫助。 –

相關問題