插入,如果没有什么更新
我需要做一个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