2012-11-26 107 views
0

我知道有很多關於INSERT/UPDATE的線程,但是我沒有找到解決我的問題的方法。MySQL:如果不存在,插入的最佳方式是什麼?

我有兩個表來管理選項:

# table 1: option_fields 
id | label | type | default 

# table 2: option_values 
id | field_id | user_id | value 

注:FIELD_ID和user_ID的應該是外​​國鍵,但事實並非如此。

我想插入option_values如果條目不存在,pseudeo代碼:

IF (field_id != 1 AND user_id != 2): 
    INSERT 
     INTO option_values (field_id, user_id, value) 
    VALUES (1, 2, "text") 
ELSE: 
    UPDATE option_values 
     SET value = "text" 
    WHERE field_id = 1 AND user_id = 2 
ENDIF; 

我所知道的方式:

#1:對重複KEY 不工作因爲唯一的主鍵是「ID」

#2:REPLACE 我不想使用REPLACE,因爲我認爲它的a骯髒的方式(每次有人改變他的選項時,主鍵會被計數)。

#3:MySQL IF,那麼 使用太多的性能,似乎也很髒。

你會選擇什麼樣的解決方案,爲什麼?我猜#1是最好的,但我無法使用它。

在此先感謝!

回答

1

雖然id是主要(也是唯一)密鑰,但您明確使用field_iduser_id的組合作爲唯一關鍵角色。

這表明,最乾淨的解決辦法是在(field_id, user_id)創造一個獨特的密鑰,並用ON DUPLICATE KEY UPDATE

繼續
相關問題