有的时候会需要写一段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. 7.25 10figting!

    TEXT 88 European utilities欧洲公用事业 Power struggles 能源之争(陈继龙编译) Nov 30th 2006 From The Economist print ...

  2. 7.25 8figting!

    TEXT 87 Fund management基金管理   A Miller's tale 米勒传奇(陈继龙编译) Dec 7th 2006 From The Economist print edit ...

  3. go 算法 查询字符在字符串中的位置

    在utf8字符串判断是否包含指定字符串,并返回下标."北京天安门最美丽" , "天安门"结果:2 解答: import ( "fmt" &q ...

  4. POJ1163 数学三角求最大路径

    描述:输入,行数,之后接数据,第一行一个数据,之后每行加一.5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 思路:简单动态规划问题.dp[i][j]定义为到这个数为止(包括这个数)的最 ...

  5. PropertySheet

    ---------------------------------include----------------------------------- E:\OpenSourceGraph\OSG_i ...

  6. MVC DbContext

    指定数据连接,指定表名,移除表名复数化(表名后面不加s),设置字段约束,主外键关系. using MvcApplication1.Models; using System; using System. ...

  7. sqlserver 开窗函数Over()的使用

    利用over(),将统计信息计算出来,然后直接筛选结果集 declare @t table(ProductID int,ProductName varchar(20),ProductType varc ...

  8. JavaScript stringObject.replace() 方法

    定义和用法: replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. 语法: stringObject.replace(RegExp/substr,reol ...

  9. Golang template和junit xml report转html工具

    最近刚好有个task是要用Golang把Junit的XML格式report转换成HTML格式,便学习了Golang的template包. 基于template做的那个junit XML转HTML工具. ...

  10. HDU 2044 一只小蜜蜂...(递推,Fibonacci)

    题意:中文题. 析:首先要想到达第 n 个蜂房,那么必须经 第 n-1 或第 n-2 个蜂房,那么从第 n-1 或第 n-2 个蜂房到达第 n 个,都各自有一条路线, 所以答案就是第 n-1 + 第 ...