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

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

a   b   c
1   b1  c1
2   b2  c2
3   b3  c3

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

INSERT INTO test VALUES(1,'b4','c4');

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

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

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

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

select count(1) from test where a=1;if count(1) > 0UPDATE test SET b='xxx',c='xxx' WHERE a=1;

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

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

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

a   b   c
1   b4  c4
2   b2  c2
3   b3  c3

本文转自博客园xingoo的博客,原文链接:Mysql Insert Or Update语法实例,如需转载请自行联系原博主。

Mysql Insert Or Update语法实例相关推荐

  1. golang mysql update_golang mysql insert 和 update使用举例

    本文结合使用场景简单介绍sql中的insert.update的使用. 以下是代码: 如果记录已经存在,则更新,否则插入新记录. package main import ( "database ...

  2. MySQL insert or update sql

    MySQL 一条 sql 实现数据保存变更  insert or update   ,如果没有执行insert,有就update 需要 有主键 PRIMARY 或 唯一索引 UNIQUE MySQL中 ...

  3. MySQL insert ignore/ update ignore 不只用来忽略id重复

    摘自https://www.mysqlzh.com/doc/126/254.html 如果您在一个INSERT语句中使用IGNORE关键词,在执行语句时出现的错误被当作警告处理.例如,没有使用IGNO ...

  4. A2-02-24.DML- Inserting Data into A Table Using MySQL INSERT Statement

    转载自:http://www.mysqltutorial.org/mysql-insert-statement.aspx Home / Basic MySQL Tutorial / Inserting ...

  5. Mysql INSERT、REPLACE、UPDATE的区别

    用于操作数据库的SQL一般分为两种,一种是查询语句,也就是我们所说的SELECT语句,另外一种就是更新语句,也叫做数据操作语句.言外之意,就是对数据进行修改.在标准的SQL中有3个语句,它们是INSE ...

  6. c mysql insert语句_MySQL_mysql insert详细讲解,INSERT语法 INSERT [LOW_PRIORITY |DELA - phpStudy...

    INSERT语法 INSERT [LOW_PRIORITY |DELAYED| HIGH_PRIORITY] [IGNORE] [INTO]tbl_name[(col_name,...)] VALUE ...

  7. 深入mysql ON DUPLICATE KEY UPDATE 语法的分析

    mysql "ON DUPLICATE KEY UPDATE" 语法 如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNI ...

  8. mysql 触发器不能同时 insert or update or delete_MySQL6:触发器

    什么是触发器 MySQL的触发器(trigger)和存储过程一样,都是嵌入到MySQL中的一段程序.触发器是由事件来触发某个操作,这些事件包括INSERT.UPDATE和DELETE语句.如果定义了触 ...

  9. 转载:MySQL数据库INSERT、UPDATE、DELETE以及REPLACE语句的用法详解

    转自:http://www.jb51.net/article/39199.htm 本篇文章是对MySQL数据库INSERT.UPDATE.DELETE以及REPLACE语句的用法进行了详细的分析介绍, ...

最新文章

  1. R语言自定义函数计算dataframe每列中的缺失值NA的个数、缺失值问题及其填充示例
  2. html网页滚轮滑动页面,JQuery实现鼠标滚轮滑动到页面节点
  3. P3225 [HNOI2012]矿场搭建
  4. Leetcode 136.只出现一次的数字 (每日一题 20210714)
  5. 注意区分啊~这里求的的事公共子串不是子序列。NOJ308-Substring
  6. java akka_Akka系列(九):Akka分布式之Akka Remote
  7. C++_IO与文件5-文件的输入与输出
  8. linux php 源码安装,Linux下PHP的源码安装与配置
  9. el 能否定义作用域变量_JS块级作用域和let,const,var区别
  10. 贪吃蛇小游戏——C语言编写
  11. android 阿拉伯语下布局,android设计的布局在阿拉伯语下界面错乱的解决方法
  12. 如果更快的访问ESS系统?
  13. 用华为模拟器ENSP构造校园网(第三天)配置总网络拓扑DHCP中继和实现路由通信
  14. 我的Qt作品(12)使用Qt+OpenCV实现一个带旋转角度的Shape形状匹配演示软件
  15. 用Python玩转数据(一)
  16. 二叉树相关题(Java实现)
  17. autocad不能画图_记住这10个cad画图技巧,轻松精通cad
  18. 基于SSH+MySQL+Bootstrap的高校实验室预约管理系统
  19. Q learning--强化学习系列文章3
  20. ssm查询,错误Could not find result map cn.itcast.ssm.po.ItemsCustom

热门文章

  1. 按我的理解string似乎不是字面值类型,但为什么《c++ primer》习题7.55答案说Data类是集合类呢?
  2. php的cookie不存在会是什么值,PHP setcookie() 首次存储不上值
  3. 8086汇编-实验6(微调)-小写转换大写
  4. [转]vim基础入门、语法速探、快捷键与宏
  5. 排序算法——快速排序算法
  6. nb信号和4g信号_手机信号很强但是4G网络却很卡?学会这三招,立马恢复网速
  7. org.apache.poi.openxml4j.exceptions.InvalidOperationException: Can't open the specified file
  8. linux里查看所有用户和用户组
  9. 为什么都说猫有九条命呢
  10. aspnetboilerplate .net core 使用原生sql