mysql 有数据就修改,无数据则新增

使用场景:

操作某个用户信息时,没有就创建该用户,有则修改该用户信息。

方法一 :replace into

replace into 会根据唯一索引或主键进行判断,如果存在则覆盖写入字段,如果不存在则新增。该方法底层是先delete再insert,如果有子表依赖的话不建议使用。

样例:

REPLACE INTO demo(id,name,age) VALUES (1,''张山',19)
方法二 :on duplicate key

on duplicate key 新增时如果导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE,如果不会导致唯一值列重复的问题,则插入新行。该方法使用是要小心避免多个唯一索引的情况下使用,当出现多个唯一索引时会出现修改任意一行数据的结果。

样例:

#values(col_name)函数只是取当前插入语句中的插入值
INSERT INTO demo(id,name,age) VALUES (1,''张山',19)
ON DUPLICATE KEY UPDATE name = values(name),age = values(age);

#age = age + values(age)可起到累加作用
INSERT INTO demo(id,name,age) VALUES (1,''张山',19)
ON DUPLICATE KEY UPDATE name = values(name),age = age + values(age)

#@ageVal可起到原子性查询数据
INSERT INTO demo(id,name,age) VALUES (1,''张山',@ageVal:=19)
ON DUPLICATE KEY UPDATE name = values(name),age = age + values(age);
select @ageVal;

#当id为主键,age为唯一索引时,数据中存在id=1,age=19时,上面的语句就相当于
UPDATE demo SET name='张山' WHERE id=1 OR age=19 LIMIT 1;

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/270304731d.html