zoukankan      html  css  js  c++  java
  • Mysql Insert Or Update语法例子

     

    有的时候会需要写一段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
    原作者:xingoo 
    Github:https://github.com/xinghalo
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    《网络攻防》第九周学习总结
    《网络攻防》第八周学习总结
    《网络攻防》第七周学习总结
    《网络攻防》第六周学习总结
    《网络攻防》第五周学习总结
    《网络攻防》第四周学习总结
    《网络攻防》第三周学习总结
    《网络攻防第二周作业》
    Kafka学习
    HBase简介及集群安装
  • 原文地址:https://www.cnblogs.com/tripChao/p/8655965.html
Copyright © 2011-2022 走看看