upsert 操作是说如果这条记录存在(含有 unique key 或 primary key 的字段存在)那么就更新,否则就插入一条新的记录。
首先创建一张新表,包含一个主键约束 id
| 1 | CREATE TABLE users( | 
然后插入多条数据:
| 1 | INSERT INTO users(name) VALUES ('a'), ('b'), ('c'); | 
如果现在要插入 id 为 2 的记录,那么就会报错:
| 1 | mysql> insert users values(2,"test"); | 
如果简单改一下,就不会报错了:
| 1 | INSERT INTO users(id, name) values (2, "test") on duplicate key update name="test"; | 
或者将 update 设置为取 values
| 1 | INSERT INTO users(id, name) values (2, "test") on duplicate key update name=VALUES(name); | 
提示 Query OK, 2 rows affected (0.01 sec)
查看一下数据,确实也更新了:
| 1 | mysql> select * from users where id = 2; | 
如果插入一条不会重复 id 的记录的话,就正常 insert 了:
| 1 | INSERT INTO users VALUES(4, 'xiaoming') ON DUPLICATE KEY UPDATE name=VALUES(name); | 
提示:Query OK, 1 row affected (0.01 sec)