2017-01-24 67 views
0

我想插入一個條目,除非它已經存在,在這種情況下,我只是想更新條目。MySql更新條目與外鍵

我所用:

let data = {data1: 'test', data2: 'test2'}; //Example 
connection.query('REPLACE INTO ' + table_name + ' SET ? ', data, (err) => { //do stuff } 

哪些工作,直到我盯着使用外鍵。我嘗試使用ON DUPLICATE KEY UPDATE,但似乎要求我列出所有字段。我正在使用它來處理不同的(和複雜的)表格,所以這不太合適:

INSERT INTO ' + table + ' SET ? ' + 
     'ON DUPLICATE KEY UPDATE {requires me to list all fields. * Doesn't seem to work}', data, err 

回答

0

您不必列出所有字段。您只需列出要更新的字段。

INSERT INTO table 
    SET 
    field1 = 4, field2 = 55 
    ON DUPLICATE KEY UPDATE 
    field1 = VALUES(field1), 
    field2 = VALUES(field2); 

與普通的UPDATE或REPLACE查詢沒有多大區別,無論如何您必須命名受影響的字段。由於您可以直接在UPDATE語句中訪問INSERT語句中使用的值,因此您不必將它們寫入兩次。只需使用VALUES(field)而不是重複插入實際值。

+0

雖然我想更新所有的字段,但我不知道哪些字段需要更新(或'SET'中的內容)。查詢運行在一個js函數中,它不包含字段的名稱。我需要爲每個表編寫一個查詢。 – Codematcha

+0

那麼?在你的代碼片段是由腳本設置?這個腳本不能擴展生成的代碼片段嗎? – antesoles

+0

對不起,它的一個js字典(如{field1:'item',field2:'item2'})由數據設置。更新了代碼片段。 – Codematcha