我無法控制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。
我無法控制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。
這可以通過稍微改變查詢的語法來實現。有些DB支持這一點。 我在互聯網上發現這個需要用MySql驗證。
INSERT INTO table
(id, name, age)
VALUES(1, "A", 19)
ON DUPLICATE KEY UPDATE
name = "B", age = 20;
在Postgres中,它被稱爲upsert。
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
函數是從插入的行中提取新值的一種便捷方式。
這意味着它不能在MySQL服務器端正確嗎? –
@AsiriLiyanaArachchi。 。 。在其他數據庫中,您可以使用觸發器。我不認爲這會在MySQL中起作用,因爲它不支持「代替」觸發器。 –
沒有設置可用於執行UPSERT。你必須修改查詢。 – Viki888
@ viki888 - 你從哪裏得知沒有這樣的「設置」?它被稱爲「在重複密鑰更新」。如果您不確定,請不要提供虛假知識。 – Mjh
@Mjh在他的問題中,他說他無法控制sql查詢,他希望通過表格模式中的某些設置來實現。 – Viki888