我需要创建一个sql查询,它尝试按主键更新行,如果不存在则插入它。对于大多数数据库(MySQL,H2,Postgres,Oracle,DB2,MSSQL,Hsql,Derby),解决方案需要是通用的。
对于代码示例,请考虑一个由两列组成的简单表:id(Pr.Key)和txt
答案 0 :(得分:3)
你想要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;
另一个解决方案是尝试插入,处理错误,检测是否违反约束,如果是,则更新。
答案 1 :(得分:0)
您必须使用存储过程才能执行此操作。 请参阅:http://jumpingbean.co.za/blog/mysql-if-exists-update-else-insert
答案 2 :(得分:0)
也许:
INSERT INTO table (id,txt) VALUES (1,"Hello")
ON DUPLICATE KEY UPDATE txt="World";
但这只是MySQL