Mysql 查询并更新的写法 ON DUPLICATE KEY UPDATE

分类:Mysql |

业务需求:先查询数据是否存在,如果已存在,则更新,若不存则写入

之前的实现方法一直是select , if(exist) update  else insert

其实mysql 提供了 一条语句即可做这件事的方法,不知为什么很少见到有人使用

如此:

INSERT INTO table_name(rule_id,member_id) VALUES (1,2) ON DUPLICATE KEY UPDATE member_id=3;

注释:查询 rule_id=1 AND member_id=2 的数据,如果不存在,则写入数据,如果存在则更新此数据的 member_id 字段值为 3  

即等于:select , insert , update 

注意事项:这里的values 必段是一个unique 的索引或是primary key 的主唯一索引,不然的话就是insert 操作

即当你执行写入操作 INSERT INTO table_name(rule_id,member_id) VALUES (1,2)  时,报 Error : Duplicate entry '1-2' for key 'ind_mem_obj' 错误才会被 update ,此语句只能操作单条记录,不可能一次更新多条或写入多条记录的


解决此问题的第二种方式:

replace into bd_promotion_member(rule_id,member_id) VALUES (1,8);

注释: 同样可以解决此业务需求,但实现略有不同,此语句的判断逻辑是,如果已存在,则删除,再insert , 不存在更新的操作 

即等于:select , delete, insert