前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Mysql Insert Or Update语法例子

Mysql Insert Or Update语法例子

作者头像
用户1154259
发布2018-01-17 14:42:55
发布2018-01-17 14:42:55
21K00
代码可运行
举报
运行总次数:0
代码可运行

有的时候会需要写一段insert的sql,如果主键存在,则update;如果主键不存在,则insert。Mysql中提供了这样的用法:ON DUPLICATE KEY UPDATE。下面就看看它是如何使用的吧!

首先数据库的原始数据如下:

代码语言:javascript
代码运行次数:0
复制
a   b   c
1   b1  c1
2   b2  c2
3   b3  c3

此时如果执行下面的sql就会报错

代码语言:javascript
代码运行次数:0
复制
INSERT INTO test VALUES(1,'b4','c4');

报错信息如下,提示无法重复插入:

代码语言:javascript
代码运行次数:0
复制
1 queries executed, 0 success, 1 errors, 0 warnings

查询:insert into test values(1,'b4','c4')

错误代码: 1062
Duplicate entry '1' for key 'PRIMARY'

执行耗时   : 0 sec
传送时间   : 0 sec
总耗时      : 0.008 sec

这时,就可以使用ON DUPLICATE KEY UPDATE,它的意思是先执行前面的Insert,如果主键重复,则执行后面的UPDATE

代码语言:javascript
代码运行次数:0
复制
INSERT INTO test VALUES (1,'b4','c4') ON DUPLICATE KEY UPDATE b=VALUES(b),c=VALUES(c);

可以把上面的SQL简单的理解为:

代码语言:javascript
代码运行次数:0
复制
select count(1) from test where a=1;

if count(1) > 0

UPDATE test SET b='xxx',c='xxx' WHERE a=1;

执行完,可以看到有两行收到影响(至于为什么两行收到影响,就得研究底层的实现了,可以参考官方文档):

代码语言:javascript
代码运行次数:0
复制
1 queries executed, 1 success, 0 errors, 0 warnings

查询:INSERT INTO test VALUES (1,'b4','c4') ON DUPLICATE KEY UPDATE b=VALUES(b),c=VALUES(c)

共 2 行受到影响

执行耗时   : 0.023 sec
传送时间   : 0 sec
总耗时      : 0.023 sec

执行完,数据就变成下面的样子了:

代码语言:javascript
代码运行次数:0
复制
a   b   c
1   b4  c4
2   b2  c2
3   b3  c3
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-05-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档