有些情况下,我们需要对数据库进行插入或更新操作的时候需要先根据特定的字段去判断是否已存在,然后做出不同的插入或者跟新操作。
replace函数:
我们要在需要判断的字段上建立一个唯一索引,且这个字段不能为空,否则就和insert完全一样了。replace其实是先删后插,给合并为一个操作了。
执行:
replace into testtb (id,name,age) values('','zhangsan',''),('','zhaoliu','');
结果:
可以看出,name为“zhangsan”的那条记录的age更新为“66”,并且插入了一条记录“4 zhaoliu 44”的数据。
ON DUPLICATE KEY UPDATE实现:
ON DUPLICATE KEY UPDATE需要判断的字段为主键或拥有UNIQUE索引,
执行:
INSERT INTO testtb(id,name,age) VALUES ('','zhangsan',''),('','qianqi','')
ON DUPLICATE KEY UPDATE age='';
结果:
可以看出,根据第一条数据的age更新为了“88”,并且插入了一条记录“5 qianqi 55”的数据。
除了以上的两种方法以外,也可以写一个sql函数来先查询再判断,那样相对麻烦且效率差一些。