我需要做一個sql查詢,試圖通過主鍵更新一個行,如果它不存在插入它。對於大多數數據庫(MySQL,H2,Postgres,Oracle,DB2,MSSQL,Hsql,Derby),該解決方案需要具有通用性。插入,如果沒有什麼更新
有關代碼示例,請考慮一個簡單的表格由兩列:ID(Pr.Key)和TXT
我需要做一個sql查詢,試圖通過主鍵更新一個行,如果它不存在插入它。對於大多數數據庫(MySQL,H2,Postgres,Oracle,DB2,MSSQL,Hsql,Derby),該解決方案需要具有通用性。插入,如果沒有什麼更新
有關代碼示例,請考慮一個簡單的表格由兩列:ID(Pr.Key)和TXT
你想SQL的MERGE
聲明,但它不工作無處不在:
MERGE into thetable using (select theid from thetable)
when matched then update thetable thecolumn = thevalue where id = theid
when not matched then insert into thetable blablabla;
另一個解決辦法是嘗試反正插入,處理錯誤,檢測是否是一個約束衝突如果是的話更新。
你必須使用一個存儲過程來做到這一點。 請參閱:http://jumpingbean.co.za/blog/mysql-if-exists-update-else-insert
這應該是一條評論。 – Oded 2011-12-17 21:01:44
你能更具體嗎?如果該表包含兩列:id(Pr.Key)和txt,查詢將會是什麼樣子? – 2011-12-17 21:06:51
可能:
INSERT INTO table (id,txt) VALUES (1,"Hello")
ON DUPLICATE KEY UPDATE txt="World";
但這是MySQL只
這個名字是'UPSERT'。它通常通過'MERGE'實現,但這絕不是普遍可用的。你能對「大多數數據庫」更具體嗎? – 2011-12-17 21:02:34
@Oded沒有。我不知道該怎麼嘗試 – 2011-12-17 21:02:39
@MartinSmith我知道MySQL中有一個'REPLACE'語句,它完全符合我的要求,但它只適用於MySQL,所以本地解決方案不適合 – 2011-12-17 21:05:23