merge into,oracle中merge into用法解析
一、如何防止sqlservermergeinto插入重复
可以用另外一张表来存储某段时间(根据你的业务需求,多长时间里对同样的号码不允许重复发送,你还需要单独的后台job,维护这张表)里发送过的验证码,对电话号码加上unique约束。
把这些操作放在一个transaction里:
插入另外一张表
插入原来的表
如果有重复的话,transaction会rollback.
二、merge into插入数据出现主键冲突
当使用"mergeinto"语句插入数据时,如果插入的数据与目标表中已存在的主键数据发生冲突,就会出现主键冲突错误。这通常是因为插入的数据中的主键与表中已有的某个记录的主键值相同,违反了主键的唯一性约束。为了解决该问题,可以先通过查询判断是否存在重复的主键值,或者在插入数据时使用适当的逻辑来处理主键冲突,例如更新已存在记录的值或者选择其他主键值。
三、into函数用法
个人理解MERGEINTO函数是个逻辑扩展函数,类似if-else函数
eg:
修改A表记录,匹配到A表的id与B表的AID相同的记录,就更新A表的year字段。没匹配到的就将B表记录插入到A表中。
MERGEINTOA_TESTAUSING(selectB.id,B.NAME,B.YEARfromB_TESTB)CON(A.id=C.id)
WHENMATCHEDTHEN
UPDATESETA.YEAR=C.YEAR
WHENNOTMATCHEDTHEN
INSERT(A.ID,A.NAME,A.YEAR)VALUES(C.ID,C.NAME,C.YEAR);