【mysql】insert ... on duplicate key update column=IF(条件,值1,值2 ) 简直神一样的操作

    Insert...on duplicate key相信大家都知道了,是一个非常好用的功能,可以在批量导入数据的时候插入并且保证在key冲突的时候执行更新操作而不是报错。笔者最近写代码的时候却碰到一个需求,就是想要在这个基础上根据某列的值来决定update后面的值,举个例子,如果columnA>0,那么更新columnB=1或者不更新,然后就在网上对duplicate key和update的用法大肆搜索一番,看有没有类似的用法,结果都是比较常规的用法,颇为失望。然后又想到普通的update是在后面加where条件的,那能不能试试直接加where条件呢?残念,这个也行不通。。。

    然后在准备放弃老老实实用2条sql执行的时候,脑子里突然灵光一闪,想到mysql不是有自带函数的么?能不能结合利用一下呢?于是查mysql函数大全,我翻翻翻,bingo!终于被我找到一个函数

IF 函数用法

语法: IF(expr1,expr2,expr3)

函数用法说明:如果 expr1 是 TRUE (expr1 <> 0 and expr1 <> NULL) ,则 IF() 的返回值为 expr2 ; 否则返回值则为 expr3 。 IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定


  这不就是我想要的吗?赶紧试试

INSERT INTO tbl (columnA,columnB,columnC) VALUES (1,2,3) ON DUPLICATE KEY UPDATE columnA=IF(columnB>0,1,columnA)

INSERT INTO tbl (columnA,columnB,columnC) VALUES (1,2,3) ON DUPLICATE KEY UPDATE columnA=IF(columnB>0,1,columnA)

    搞定!这样在insert on duplicate key update的时候就可以根据某列值的不同来决定update的值了




评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值