一 : insert or update
前段时间遇到一个问题
需求如下: 一张表中有几个联合唯一索引 如果索引不存在 则插入 存在则更新
查了资料后 采用了mysql 的 insert or update 方法
连接如下 https://my.oschina.net/hccake/blog/734793
但是当时我并没有理解 其实insert or update 方法是支持批量动态更新的:
现在有 一张表 test a,b 字段是联合唯一索引
insert into test (a,b,num) values('a','a',3),('b','b',5) on duplicate key update num=num+values(num)
此条sql 前半部分和 批量insert 相同
on duplicate key 关键字 标识 如果该表中有UNIQUE索引或PRIMARY KEY 主键 重复的情况下 导致插入失败 会自动执行update方法 更新的字段和值 在末尾追加
中 num+values(num) 中 num是 表中已存在记录的数量 values(num) 则是取的批量更新时 每次待更新的 记录中num的数据
比如上述 sql执行完 的 值如下
num = 原记录值 + 新记录值
ps:如需 更新值写死 也可以写成 num = num + 1
或者 直接更新为带插入数据的 num值 num = values(num)
二:采用replace 实现
replace into test (a,b,num) values('a','a',2),('b','b',3),('a','a',10)
但是replace 方法是 根据唯一键值做判断 如果存在 则先删除 再插入
执行完sql后
改语句先将原表中 记录删除 后插入
再将删除 插入
最后由于 中 联合唯一索引重复
又将刚才插入的 删除 插入
具体实现代码是 需要采用哪种方法 还是要根据项目需求来分析