SQL 如果不存在则插入,存在则不做操。
Oracle
语法
复制收展SQLmerge into tableName
using dual on (条件)
when not matched then
insert(a,b)
values('a','b')
- 1
- 2
- 3
- 4
- 5
实例
复制收展XML<!--如果不存在则插入-->
<update id="insertByMemberNameNoExist" parameterClass="member" >
merge into CFB_MEMBER cm
using dual on (cm.MEMBERNO = #memberNo#)
when not matched then
insert (MEMBERNO, MEMBERNAME, MEMBERTREENO, OPEN_FLAG, QUOTA_MODE, USESCALE, CLTNO, PAY_MODE, INCOME_MODE, AUTO_CARRYOVER)
values (#memberNo#, #memberName#, #memberTreeNo#, #activeFlag#, #quotaMode#, #useScal#, #cltNo#, #payMode#, #incomeMode#, #autoCarryover#)
</update>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
--
MySQL
语法
ON DUPLICATE KEY UPDATE
实例
INSERT INTO tableName(a,b,c) VALUES(1, 1, 1) ON DUPLICATE KEY UPDATE name='1';
--
ON DUPLICATE KEY UPDATE 特别适用于多行插入。
如果INSERT多行记录, ON DUPLICATE KEY UPDATE后面字段的值如何指定?
一条INSERT语句中只能有一个ON DUPLICATE KEY UPDATE,如果是多行记录,结果他会更新哪一行记录,还是更新所有需要更新的行。
实际上是使用VALUES()函数,可以解决这个问题。
实例
复制收展SQLINSERT INTO TABLE (a,b,c) VALUES
(1,1,1),
(1,2,2),
(3,3,3)
ON DUPLICATE KEY UPDATE a=VALUES(a);
- 1
- 2
- 3
- 4
- 5
tip:使用on duplicate key update会导致自增的主键跳跃自增