2015-11-03 47 views
0

我有一個存儲userSettings的表。這些設置是從具有默認值的設置表和用戶表中生成的。如果用戶設置了某些內容(或更改了默認值),我將userIndications表中的自定義值存儲在settingID和UserID中。基於2個外鍵列插入或更新

我得到的感謝設置,從這個幫助,所以質疑Joining 3 MySQL tables in to 1 query

現在我想要做的是插入一條記錄,如果它不存在,或者更新,如果它。

我知道我可以使用ON DUPLICATE KEY,但是我想測試兩個外鍵的userID和settingID,而不是測試userSettings表的主自動增量ID userSettingID。如果有匹配更新,如果沒有匹配插入。

用戶最多可能有20個自定義設置,因此我無法在userID列上設置UNIQUE。

感謝

+0

'在dupe key'上可以使用** ANY **唯一密鑰。它不一定是主鍵。所以如果你有'(userID,settingID)'作爲唯一鍵,那麼這足以觸發更新。如果他們是外鍵也沒關係。這些字段中的值仍然位於本地表中。他們只是有其他地方必須存在的額外財產。 –

+0

我嘗試將UNIQUE添加到userID和settingID列,但由於userSettings表中有多個userID列,所以失敗。 – puks1978

+0

「多個用戶專欄」?咦?列名在表中是唯一的。你不能有2+名稱相同的列。另一方面有多個記錄......但是如果你有多個userid/settingid的副本,你如何判斷這些設置值中的哪一個適用? –

回答

1

這是MySQL唯一的功能,但你可以使用REPLACE INTO,而不是INSERT INTO。如果您在多個字段(userID,settingsID)上添加了一個UNIQUE索引,則查詢會自動按照您的要求進行。

[編輯]

從手冊:

REPLACE作品酷似INSERT,不同之處在於,如果舊的行中的 表具有相同的值作爲一個新的行爲PRIMARY KEY或一個UNIQUE 索引,插入新行

前要添加一個索引到多個字段(來自How do I specify unique constraint for multiple columns in MySQL?)舊的行被刪除:

ALTER TABLE `tbl` ADD UNIQUE `unique_index`(`userID`, `settingsID`); 
+0

我目前面臨的問題是試圖在用戶ID列上添加UNIQUE,因爲可能有多個用戶ID的行,但只有一行包含userID和settingID組合。 – puks1978

+0

@ puks1978當然,userID和settingsID的組合是唯一的嗎? – soulfreshner

+0

是的,組合只能存在一次。我試圖將UNIQUE添加到每列,而不是多列。謝謝。 – puks1978