官方的解释是使用: INSERT ... ON DUPLICATE KEY UPDATE语句
例子:
INSERT INTO t1 (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
UPDATE t1 SET c=c+1 WHERE a=1;
没试过这种方式
2、REPLACE
REPLACE INTO user (id,open_id,nick_name,gender) VALUES(456,"789456","张", 0);
使用该语句之后发现他删掉了我其他的数据,很疑惑,查看文档后发现:REPLACE INTO 如果存在 primary 或 unique 相同的记录,则先删除掉。再插入新记录
示例:
这是我的数据结构:id为主键,open_id有唯一约束
我想要使用REPLACE来修改或新增一条数据,执行语句:REPLACE INTO user (id,open_id,nick_name,gender) VALUES(123,"a","张 - 哈哈", 0); 这条数据是存在的,所以它会把nick_name改为 张 - 哈哈
我们可以看到结果已经改变了,并且数据库提示:Affected rows: 2,下面是改变后效果图
上图是正常的实现,下面来演示primary 或 unique 相同会出现的情况,我修改并执行以下sql语句
REPLACE INTO user (id,open_id,nick_name,gender) VALUES(1234,"a","张 - 哈哈", 0);
数据库提示:Affected rows: 3
再查看数据,我们发现id为123那条数据不见了,取而代之的是这条id为1234的数据
通过以上实例,正确的解释了:REPLACE INTO 如果存在 primary 或 unique 相同的记录,则先删除掉。再插入新记录
以此记录