wxyfj 发表于 2017-12-13 12:53:33

Mysql Insert Or Update语法例子

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

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

a   b   c  
1   b1c1
  
2   b2c2
  
3   b3c3
  

  此时如果执行下面的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   b4c4
  
2   b2c2
  
3   b3c3
  
页: [1]
查看完整版本: Mysql Insert Or Update语法例子