2016-11-09 75 views
0

我無法控制sql查詢。根據主鍵插入或更新

INSERT INTO table (id, name, age) VALUES(1, "A", 19) 

更改應該在mysql服務器端完成。有沒有可以實現這一點的設置。 ? (無需修改插入查詢) id是主鍵。

INSERT INTO table (id, name, age) VALUES(1, "B", 20) 

上面的查詢應該使1,A,19行變爲1,B,20。

+0

沒有設置可用於執行UPSERT。你必須修改查詢。 – Viki888

+1

@ viki888 - 你從哪裏得知沒有這樣的「設置」?它被稱爲「在重複密鑰更新」。如果您不確定,請不要提供虛假知識。 – Mjh

+0

@Mjh在他的問題中,他說他無法控制sql查詢,他希望通過表格模式中的某些設置來實現。 – Viki888

回答

0

這可以通過稍微改變查詢的語法來實現。有些DB支持這一點。 我在互聯網上發現這個需要用MySql驗證。

INSERT INTO table 
(id, name, age) 
VALUES(1, "A", 19) 
ON DUPLICATE KEY UPDATE 
name = "B", age = 20; 

在Postgres中,它被稱爲upsert。

0

MySQL支持ON DUPLICATE KEY UPDATE。這確實需要更改查詢。我建議寫這篇爲:

INSERT INTO table (id, name, age) 
    VALUES(1, 'B', 20) 
    ON DUPLICATE KEY UPDATE name = VALUES(name), age = VALUES(age); 

這假定id被宣佈爲一個主鍵或至少unique

VALUES函數是從插入的行中提取新值的一種便捷方式。

+0

這意味着它不能在MySQL服務器端正確嗎? –

+0

@AsiriLiyanaArachchi。 。 。在其他數據庫中,您可以使用觸發器。我不認爲這會在MySQL中起作用,因爲它不支持「代替」觸發器。 –