有表:sys_config, 字段:id、config_key、config_value
SqlServer:(已验证)
if not exists (select * from sys_config where id = '1')
INSERT INTO sys_config (id,config_key,config_value) VALUES('1','A','X')
else update sys_config set config_key = 'B',config_value = 'Y' where id = '1'
MySQL:(已验证)
规则: 如果你插入的记录导致一个UNIQUE索引或者primary key(主键)出现重复,那么就会认为该条记录存在,则执行update语句而不是insert语句,反之,则执行insert语句而不是更新语句。
INSERT INTO sys_config(id,config_key,config_value) VALUES('1','A','X')
ON DUPLICATE KEY
UPDATE config_key="B",config_value="Y"
Oracle: (Oracle 未验证,仅供参考)
使用 MERGE INTO 高效方法:
eg: 有一个table QQ 三个字段 a,b,c 。一条新记录比较 a,b两个字段。如有记录则update,无则insert
MERGE INTO QQ T1
USING (SELECT ‘aa’ AS a ,‘bb’ AS b,‘cc’ as c FROM dual) T2
ON ( T1.a=T2.a and T1.b=T2.b)
WHEN MATCHED THEN
UPDATE set T1.c= T2.c
WHEN NOT MATCHED THEN
INSERT ('id',a, b, c ,'state' ) values ('001','aa','bb','cc','2')