Oraclemergeinto语法修改为MySQL语法解决⽅案
(Oracle merge into语法修改为MySQL语法解决⽅案)
在MySQL中得使⽤“on duplicate key update”来实现判断新增还是更新操作。
但是这⾥有⼀个⼤坑,就是MySQL没有判断更新还是新增的条件。
这也不怪MySQL的设计,因为不难想出,要按照条件满⾜进⾏更新,条件不满⾜进⾏新增的业务逻辑,数据库中应该满⾜条件的数据只有⼀条。想通这⼀点。就知道有解决⽅案了。
saiclink安卓版下载
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
mysql语句转oracle
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(pe= 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}工作流引擎下载>反乌托邦三部曲阅读顺序
应该可以解决你的问题了,解决问题了点个赞。
没解决哪⾥有问题呢?加注明来意,我帮你看看。