ON DUPLICATE KEY UPDATE 使用方法。

总结放页顶,前途必似锦:整个语句,可拆分成两段来看,唯一索引没有重复时,看前半段,就一个insert语句。

如果唯一索引重复,则执行更新,更新时,看ON DUPLICATE KEY UPDATE 后面的处理。有处理的才更新,没处理的不更新,

其中处理时,用values括号括起来的,就是取前values里面的值,没有被括起来的,就是取数据库该字段更新前的值。

先看一下数据库里面要操作的表,其中user_id是主键。

SQL语句执行前,数据库状态如下。

SQL语句如下。

INSERT INTO community_user_statistic ( user_id, fans_count, interest_count, likes_count, stories_count, moment_count, marks_count )
VALUES( 2, 2, 3, 4, 5, 6, 7 )
ON DUPLICATE KEY UPDATE stories_count = stories_count + 10,
fans_count = VALUES( fans_count ) + 10,
interest_count = VALUES( interest_count ),
marks_count = marks_count

那我们就执行上图的SQL语句。

上图可知只影响了一行数据。我们再看结果。

已经正常插入了,值也和我们VALUES里面设置的一样。但是ON DUPLICATE KEY UPDATE后面那一块儿的处理没有任何作用,这是因为ON DUPLICATE KEY UPDATE这个语句的意思呢,就是SQL语句中涉及到的唯一索引,数据库里面有就执行更新,没有就执行插入。

为了方便看一下语句的更新功能,我们修改一下SQL,就是主键ID不变的情况下,VALUES里面的值都增加10,

ps:ON DUPLICATE KEY UPDATE后面的语句没有改动,和第一次执行时一样的。

可以自己先想想看更新后各个字段的值是怎样的。

INSERT INTO community_user_statistic ( user_id, fans_count, interest_count, likes_count, stories_count, moment_count, marks_count )
VALUES( 2, 12, 13, 14, 15, 16, 17 )
ON DUPLICATE KEY UPDATE 
fans_count =VALUES( fans_count )+ 10,
interest_count =VALUES( interest_count ),
stories_count = stories_count + 10,
marks_count = marks_count

执行一下看看结果。

影响了两行,说明更新成功了。再看看结果,各个字段的值和你预想的一样吗?

我们一个一个分析。我们把INSERT INTO 后面附属的VALUES称为前VALUES。ON DUPLICATE KEY UPDATE后的VALUES称为后VALUES。

user_id:我们没有做处理,所以没变。

fans_count:前VALUES里面设置的是12,

                     ON DUPLICATE KEY UPDATE后面的处理是 fans_count =VALUES( fans_count )+ 10, 所以是12+10=22。

interest_count:前VALUES里面设置的是13,

                     ON DUPLICATE KEY UPDATE后面的处理是 interest_count =VALUES( interest_count ).所以值为13。

likes_count:ON DUPLICATE KEY UPDATE后面没处理,依然保持原值4。

stories_count(和fans_count对比着看):前VALUES里面设置的是15,

                       ON DUPLICATE KEY UPDATE后面的处理是 stories_count = stories_count + 10, 没有用VALUES括号括起来的,就是数据库原来的值。所以 5+10=15。 

moment_count:和stories_count同理,所以是6。
 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值