mysql merge 语法_MySQL类似Merge的语法:ON DUPLICATE KEY UPDATE

表结构如下:create table test.t2

(

id int primary key not null,

col int not null

)engine=myisam default charset=gbk;

bb710777c7eeba75390146eac42c59ff.png

如果执行下面的代码:insert into test.t2

(

id,

col

)

values (1,1);

由于id列为主键一定会报错。但是当我们在后面加上ON DUPLICATE KEY UPDATE,会怎么样呢?insert into test.t2

(

id,

col

)

values (1,1)

on duplicate key update col=col+1;

00b8065e11559949d818fedae32ad9b2.png

你会惊奇的发现,代码可以执行,没有报错。奇迹是怎么样发生的呢?原来这是MySQL特有的语法,ON DUPLICATE KEY UPDATE的意思就是当发生重复值的时候,就执行UPDATE后面的代码。现在id=1的记录已经存在,那么就满足了出现重复值的条件,所以这段代码其实执行的是col=col+1,自然结果就等于2了。

简单吧。不要以为ON DUPLICATE KEY UPDATE就这点能耐,再来看下面这段代码:insert into test.t2

(

id,

col

)

values (1,1),(1,2)

on duplicate key update col=col+1;

先别急着看结果,想想应该会出现什么?对了对了,col列现在的值是4了:

ae770a0ae8ba3dbf2a0339a849b57320.png

WHY?因此这次values后面有两组值,都满足出现重复值的条件,因此update col=col+1也被执行了2次,所以col现在是4了。

呵呵,还有更高级的功能呢,请看下面的代码:insert into test.t2

(

id,

col

)

values (1,3),(1,7)

on duplicate key update col=values(col);

这次也来想想,结果会是怎样的?

5e9d1f1df619bd5e2219b60d0df8cd8b.png

没想到吧,可以如此灵活使用,基本上可以弥补MySQL没有Merge语法的功能了(只是没有对删除的处理)。

适用于判断是否存在记录,如果不存在则添加,存在则修改的场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值