MySQL的insertonduplicatekeyupdate是什么?

MySQL的INSERT … ON DUPLICATE KEY UPDATE可以实现插入新记录或更新已有的相同主键记录。
基本语法为:

INSERT INTO table ( field1, field2,...fieldn)  
VALUES (value1,value2,...valuen)  
ON DUPLICATE KEY UPDATE   
   field1=value1,   
   field2=value2,   
   ...  
   fieldn=valuen;

示例:

INSERT INTO users (id, name)  
VALUES (1, 'John')  
ON DUPLICATE KEY UPDATE   
   name = 'John';  
  • 如果id=1的记录不存在,则添加新记录
  • 如果id=1的记录已存在,则更新name字段为’John’

因此,该语句可以用来:

  • 增加新记录(id不存在)
  • 更新记录(id已存在)

主要做到了:

  • 根据主键(或唯一索引)判断记录是否存在
  • 如果存在则更新,如果不存在则插入

这就允许我们使用单个SQL语句,实现插入或更新操作。

它可以用于:

  • 采集统计数
  • 用户注册
  • 计数器
  • 等需要插入或更新的场景。