duplicate"/>
有则改之无则插入duplicate
场景
数据库中常用的莫过于增(insert), 删(delete), 改(update), 查(select)。
不过,业务方面偏重是必然的:
- 用户激增:insert
- 垃圾数据:delete
- 频繁变化:update
- 判断依据:select
但是,场景并不是一成不变的,现实情况常有一些特殊的需求。
比如,有则修改,无则增加。
办法
针对这种要求,拆分成简单逻辑只不过是如此
- 查询:select
- 分支:
1. 存在:update
2. 不存在:insert
基本就是这种逻辑了,脚本或者是代码,拥有连接就拥有一切。
只是,缺点明显
- 多分支:三步走
- 多语句:双语句
- 多代码:多冗余
如果有点要求的,这种办法简直就是小学生作文,修辞甚是不美。
于是,找到了它---小哪吒
on duplicate key update
多了四个单词,但是不要怕,用起来实在太简单,但真滴是实用。
一般语句
insert into person(id, age, name, gender) values(69, 23, "godme", "male");
一般情况下当然是简写,不过为了对照,还是来全套一把。
选择语句
insert into person(id, name, age, gender) values(69, "godme", 23, "female") on duplicate key update id=values(id), gender=values(gender);
好像不是很短,但是仔细看一看,也就两步而已:
- 关键词
- 关键参数
关键词
关键词,其实也就是 on duplicate key update 而已
关键参数
搞程序的,这个不难懂吧id=values(id),形参和取值,多个关键参数直接逗号分隔就行。
解读一下:看表里面有id=69的这个人没有,有的话就修改性别为female,没有的话就新增这条记录。
真的不难用吧,你看
- 直接拼接,不打乱正常使用顺序
- 还可以这样对应数据
- 功能如此强大
好用,但是有坑。
修改的话是依据主键进行判别的,通过主键的唯一性来保证数据的唯一性的。
但是数据不存在的话,主键不是自增比较好么?
.........
我会说我是把判别字段升级成主键了么。
别说,好用,无错,没有不合规范,问题完美解决。
更多推荐
有则改之无则插入duplicate
发布评论