MySQL插入数据insert into on duplicate key update,重复数据自动更新

MySQL中插入数据,如果插入的数据在表中已经存在(主键或者唯一键已存在),使用insert into on duplicate key update 语法可以更新重复数据的某些字段值。

1、语法

insert into table_name(field1,field2,…fieldN) values(value1,value2,…valueN) on duplicate key update fieldM = valueM;

限制条件:

  • 主键重复
  • 唯一键重复

2、案例

表结构及数据如下:

 CREATE TABLE table_name(
  id int(11) NOT NULL,
  name varchar(50) DEFAULT NULL,
  age int(11) DEFAULT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY uk_name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> select * from table_name;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | Tom  |   20 |
+----+------+------+

以下三条SQL,执行结果都一样,只要主键或者唯一键发生重复,就会更新该条记录的age字段值:

  • insert into table_name values(1,’Bill’,21) on duplicate key update age = 21;
  • insert into table_name values(2,’Tom’,21) on duplicate key update age = 21;
  • insert into table_name values(1,’Tom’,21) on duplicate key update age = 21;
mysql> select * from table_name;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | Tom  |   21 |
+----+------+------+
1 row in set (0.00 sec)

以上可以看到age字段已经从20被更新为21。

发表评论