有则改之无则插入duplicate

版权声明:来一来,看一看,有钱的捧个人场,没钱的你不得捧个人场 https://blog.csdn.net/wait_for_eva/article/details/81562412

场景

    数据库中常用的莫过于增(insert), 删(delete), 改(update), 查(select)。

    不过,业务方面偏重是必然的:

  1. 用户激增:insert
  2. 垃圾数据:delete
  3. 频繁变化:update
  4. 判断依据:select

但是,场景并不是一成不变的,现实情况常有一些特殊的需求。

比如,有则修改,无则增加。

办法

针对这种要求,拆分成简单逻辑只不过是如此

  1. 查询:select
  2. 分支:

1. 存在:update

2. 不存在:insert

基本就是这种逻辑了,脚本或者是代码,拥有连接就拥有一切。

 

只是,缺点明显

  1. 多分支:三步走
  2. 多语句:双语句
  3. 多代码:多冗余

如果有点要求的,这种办法简直就是小学生作文,修辞甚是不美。

于是,找到了它---小哪吒

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);

好像不是很短,但是仔细看一看,也就两步而已:

  1. 关键词 
  2. 关键参数

关键词

    关键词,其实也就是 on duplicate key update 而已

关键参数

    搞程序的,这个不难懂吧id=values(id),形参和取值,多个关键参数直接逗号分隔就行。

解读一下:看表里面有id=69的这个人没有,有的话就修改性别为female,没有的话就新增这条记录。

真的不难用吧,你看

  1. 直接拼接,不打乱正常使用顺序
  2. 还可以这样对应数据
  3. 功能如此强大

好用,但是有坑。

修改的话是依据主键进行判别的,通过主键的唯一性来保证数据的唯一性的。

但是数据不存在的话,主键不是自增比较好么?

.........

我会说我是把判别字段升级成主键了么。

别说,好用,无错,没有不合规范,问题完美解决。

猜你喜欢

转载自blog.csdn.net/wait_for_eva/article/details/81562412