Oracle merge into语法修改为MySQL语法解决方案

(Oracle merge into语法修改为MySQL语法解决方案)

在MySQL中得使用“on duplicate key update”来实现判断新增还是更新操作。

但是这里有一个大坑,就是MySQL没有判断更新还是新增的条件

这也不怪MySQL的设计,因为不难想出,要按照条件满足进行更新,条件不满足进行新增的业务逻辑,数据库中应该满足条件的数据只有一条。想通这一点。就知道有解决方案了。

MySQL是将需要判断的业务字段设置为联合唯一约束来配合“on duplicate key update”语法实现。

意思就是严格认为数据库只有一条或者零条符合约束条件(判断更新或新增条件)的数据。如果数据库有多条数据需要更新的话,MySQL就不支持直接修改SQL层面了,这里就得拆分原先的Oracle语法

先查询满足条件的条数是否大于0
大于0执行按条件更新操作
不大于0执行按条件新增操作

MySQL增加联合唯一约束

ALTER TABLE TABLE_NAME(表名)  ADD UNIQUE KEY (字段A, 字段B,···);
-- Oracle merge into 语法
merge into table
        using (schema. table | views | query) -- 这里边可以传参数
        on (判断条件) -- 用于判断是更新还是新增的条件
        when matched then
       		update set 	--满足条件更新操作
        when not matched then
	        insert()			-- 不满足条件、插入操作
	        values()
-- 例子
merge into TABLE_NAME t_name
        using (select #{type} type, #{batchNo} batchNo from dual) t
        on (t_name.type= t.type	and	t_name.BATCH_NO = t.batchNo)
        when matched then
        	update set t_name.status = #{status,jdbcType=VARCHAR}
        when not matched then
        	insert(PK_ID,status )
        	values('11111',#{status,jdbcType=VARCHAR})

-- MySQL语法(需要(判断条件)创建唯一约束后方可使用)
insert into TABLE_NAME 
	(PK_ID,status )
    values
    ('11111',#{status,jdbcType=VARCHAR})
    on duplicate key update
    status = #{status,jdbcType=VARCHAR}

应该可以解决你的问题了,解决问题了点个赞。
没解决哪里有问题呢?加微信注明来意,我帮你看看。
在这里插入图片描述

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值