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)