2015-11-28 45 views
1

多列,我有以下表MySQL的唯一鍵無法正常運行包含一個主鍵

table `thing` { 
    id 
    other_id 
    another_id 
    text 
    primary key (id) 
    unique key (id, other_id, another_id) 
} 

數據

id | other_id | another_id | text 
---|----------|------------|--------------- 
4 | 1  | 3   | This is text 
5 | 1  | 3   | More text 

然後我運行下面的查詢

INSERT INTO thing (id, other_id, another_id, text) VALUES ('5','1','4','A new row') 
ON DUPLICATE KEY UPDATE 
    text = VALUES(text) 

而不是插入新行(因爲值5,1,4是唯一的),ID 5的行將更新爲新文本。

它就好像獨特的密鑰被忽略一樣。

+2

是的。主鍵是唯一的。所以,'5'已經存在,因此'ON DUPLICATE KEY'會更新現有的行。 – Kenney

+0

請在查詢的第一個'value'之前添加換行符 – Blag

回答

1

這是識別一行爲唯一的主鍵,並定義您的擦除(在您的情況下,更新)或添加一個新行。 「唯一索引」僅用於性能/數據完整性。

您需要一個複合主鍵又名primary key (id, other_id, another_id)