2017-12-27 182 views
1

我知道MYSQL中的INSERT ... ON DUPLICATE KEY UPDATE語法,但是有沒有辦法插入別的東西呢?更具體地講,說我有:MYSQL ON DUPLICATE KEY插入別的東西

INSERT INTO main (a,b,c,d,e) VALUES ('$a','$b','$c','$d','$e'); 

,其中列「一」是獨一無二的,包含了一個任意10位數的字母數字字符串,我是在客戶端的電子郵件發送到檢索數據鏈路的公共查詢字符串中使用從數據庫。 我知道有可能會產生相同的字符串,因爲有62^10個可能性,但想象一下$a包含一個已經存在的10位字符串。我在$a2中生成了第二個字符串作爲備份,現在我想修改上面的插入語句,如果$a已經存在可以使用$a2。所以理想情況下我正在尋找類似的東西:

INSERT INTO main (a,b,c,d,e) VALUES ('$a','$b','$c','$d','$e') ON DUPLICATE KEY USE $a2 INSTEAD OF $a; 

這怎麼辦?據我所知ON DUPLICATE KEY INSERT something else語法不存在。此外,我的條目列表長約20-25個鍵值對,所以理想情況下我正在尋找只插入不同「a」而不必重寫整個鍵值對列表的內容。 謝謝。

回答

0

你會做:

INSERT INTO main (a, b, c, d, e) 
    VALUES ('$a', '$b', '$c', '$d', '$e') 
    ON DUPLICATE KEY UPDATE a = $a2; 

編輯:

如果要添加新行,你可以這樣做:

INSERT INTO main (a, b, c, d, e) 
    SELECT (CASE WHEN EXISTS (SELECT 1 FROM main m WHERE x.a = m.a) 
       THEN $a2 ELSE x.a 
      END) as a, 
      b, c, d, e 
    FROM (SELECT '$a' as a, '$b' as b, '$c' as c, '$d' as d, '$e' as e) x; 
+0

但這不是簡單地更新現有條目的列'a'嗎?我需要插入一個帶有獨特'a'的全新條目。 – Oliver

+0

@Oliver。 。 。謝謝你的澄清。 –

+0

哇,這很複雜。對不起,我不太明白這個語法。有沒有一些關鍵字丟失?例如,'SELECT 1 FROM main m'似乎沒有任何意義(可能缺少'as')?我認爲'x'也是如此。最後一行是什麼? 'FROM(SELECT ...'?你是否定義變量作爲列名?對不起,我的無知,, – Oliver

0

您還可以使用REPLACE INTO。如果您的表的主鍵匹配,則會替換舊數據,否則它將作爲新行插入。

+0

抱歉,但這也取代了現有的條目。需要插入一個全新的條目,同時確保列「a」是唯一的。 – Oliver

相關問題