Skip to content

Latest commit

 

History

History
61 lines (43 loc) · 1.81 KB

InsertOnDuplicateKeyUpdate.md

File metadata and controls

61 lines (43 loc) · 1.81 KB

insert 语句的on duplicate key update

在mysql中,insert语句有这样的用法insert into <table_name> values (v1, v2, v3) on duplicate key update ...

这样的含义是:如果主键重复,或者unique key重复,则执行update语句;否则执行insert语句。

eg.

比如,有一个表people:

create table people(
    id int not null auto_increment,
    name varchar(100) not null,
    age int,
    primary key(id)
);

已经有数据:

mysql> select * from people;
+----+--------+------+
| id | name   | age  |
+----+--------+------+
|  3 | John   |   30 |
|  4 | \James |   33 |
+----+--------+------+
2 rows in set (0.00 sec)

然后,再执行insert into people (id, name, age) values (3, 'Jack', 21) on duplicate key update name = 'Jack', age = 21;语句的时候,因为已经存在主键3了,所以不执行insert语句,而执行update语句:

mysql> insert into people (id, name, age) values (3, 'Jack', 21) on duplicate key update name = 'Jack', age = 21;
Query OK, 2 rows affected (0.02 sec)

mysql> select * from people;
+----+--------+------+
| id | name   | age  |
+----+--------+------+
|  3 | Jack   |   21 |
|  4 | \James |   33 |
+----+--------+------+
2 rows in set (0.00 sec)

MySQL 系列: