SqlServer(先更新,受影响条数为0,则Insert,通过事务):
begin tran update table set column=columnvalue where wherestr if @@ROWCOUNT==0 begin insert into table (column) values (columnvalue) end commit tran
Oracle(Merge Into的原理是,从using 搜出来的结果逐条与on条件匹配,然后决定是update还是Insert):
MERGE INTO table t --USING (SELECT whereStrColumn FROM SYS.DUAL) s 大部分情况下使用SYS.DUAL是个好的选择,但是如果同时插入或更新通过个主键,会导致ORA-00001违反唯一键约束 USING (SELECT whereStrColumn FROM table where whereStr) s ON (t.whereStrColumn=s.whereStrColumn) WHEN MATCHED THEN UPDATE SET column=columnValue WHEN NOT MATCHED THEN INSERT (column) VALUES (columnValue)
MySql(Mysql语法提供了):
INSERT INTO table (column) VALUES (columnValue) ON DUPLICATE KEY UPDATE column=columnValue