有的时候会需要写一段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) > 0

UPDATE 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

Mysql Insert Or Update语法例子的更多相关文章

  1. Mysql Insert Or Update语法实例

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

  2. Mysql insert on update

    数据库 Mysql INSERT INTO table (column_list) VALUES (value_list) ON DUPLICATE KEY UPDATE c1 = v1, c2 = ...

  3. mysql insert into select 语法

    Insert into Table2(field1,field2,...) select value1,value2,... from Table1  这样就对了

  4. 深入mysql “ON DUPLICATE KEY UPDATE” 语法的分析

    本篇文章是对mysql “ON DUPLICATE KEY UPDATE”语法进行了详细的分析介绍,需要的朋友参考下. mysql “ON DUPLICATE KEY UPDATE” 语法 如果在IN ...

  5. MySQL数据库INSERT、UPDATE、DELETE以及REPLACE语句的用法详解

    本篇文章是对MySQL数据库INSERT.UPDATE.DELETE以及REPLACE语句的用法进行了详细的分析介绍,需要的朋友参考下   MySQL数据库insert和update语句引:用于操作数 ...

  6. Mysql 下 Insert、Update、Delete、Order By、Group By注入

    Insert: 语法:INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) 报错注入: insert into test(id,name,p ...

  7. 可遇不可求的Question之INSERT … ON DUPLICATE KEY UPDATE 语法篇

    MySQL 自4.1版以后开始支持INSERT … ON DUPLICATE KEY UPDATE语法,使得原本需要执行3条SQL语句(SELECT,INSERT,UPDATE),缩减为1条语句即可完 ...

  8. Mysql INSERT、REPLACE、UPDATE的区别

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

  9. mysql INSERT ... ON DUPLICATE KEY UPDATE语句

    网上关于INSERT ... ON DUPLICATE KEY UPDATE大多数文章都是同一篇文章转来转去,首先这个语法的目的是为了解决重复性,当数据库中存在某个记录时,执行这条语句会更新它,而不存 ...

随机推荐

  1. 背景半透明rgba最佳实践

    by 一丝 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...

  2. Go structs、slices、maps

    [Go structs.slices.maps] 1.定义时*在变量名后面,使用时*在变量名前面. 2.定义struct,type在前,struct关键字在后. 3.指针可以指定struct. 4.A ...

  3. 使用Git将码云上的代码Clone至本地

    1. 安装Git https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git Git的网站上有详细的分各种系统的安 ...

  4. nyoj36-最长公共子序列 (LCS)

    http://acm.nyist.net/JudgeOnline/problem.php?pid=36 最长公共子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 ...

  5. 通过Jenkins自动构建dubbo服务时的问题汇总

    最近接触新的dubbo项目,项目初始时,测试环境的提供者服务发布较频繁,奈何公司又没有自动发布工具,遂自己在测试环境中搭建了Jenkins用于dubbo服务的发布.由于第一次使用,过程中也遇到了一些问 ...

  6. 无脑无负担网站架构-- Application Request Route的一些应用

    首先作为一个.net 程序员,多数情况你懒的整什么架构啊.框架啊.还有那命令行的linux,别说linux也有桌面,那个桌面用起来更让人抓狂,一直不明白居然有人说喜欢上linux的命令行,装B还是SB ...

  7. CoreDNS for kubernetes Service Discovery

    一.CoreDNS简介 Kubernetes包括用于服务发现的DNS服务器Kube-DNS. 该DNS服务器利用SkyDNS的库来为Kubernetes pod和服务提供DNS请求.SkyDNS2的作 ...

  8. CodeForces 681B Economy Game (暴力)

    题意:给定一个数,问能不能 找到非负 a, b, c,使得 a × 1 234 567 + b × 123 456 + c × 1 234 = n. 析:二重循环,去确定c. 代码如下: #inclu ...

  9. CI框架下的PHP增删改查总结

    controllers下的 cquery.php文件 <?php class CQuery extends Controller { //构造函数 function CQuery() { par ...

  10. (巴什博弈 sg函数入门1) Brave Game -- hdu -- 1846

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1846 首先来玩个游戏,引用杭电课件上的: (1) 玩家:2人:(2) 道具:23张扑克牌:(3) 规则: ...