mysql 添加(insert into)不存在插入,存在不管

我们在很多需求中,都会有这样一个场景,例如:

   我们在加入菜单的时候,总会想出现主键冲突,为了避免这样的情况!我们会在实际的场景中,在主键ID存在的时候不予添加,只有不存在的时候才给予添加。我们通用的方法一般是:

1.(这种方式一般是用在存储过程中)

if not exists (select 1 from ...) then insert ... end if;

 2.

 

insert into user_tab(user_id) select 1 from user_tab ut where ut.user_id != 1;

 

 

但是在Mysql中有:

ON DUPLICATE KEY UPDATE

 Mysql中文档解释是:

 

   如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行UPDATE。例如,如果列a被定义为UNIQUE,并且包含值1,则以下两个语句具有相同的效果:

 它给例子:

mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)
    -> ON DUPLICATE KEY UPDATE c=c+1;

  等同:

mysql> UPDATE table SET c=c+1 WHERE a=1

简单来说,就是存在就会执行update,不存在就添加,存在就执行修改!那么由此,我们就可以这样做:

 

insert into menu_tab(menu_id,menu_name) values(1,'主菜单')
 ON DUPLICATE KEY UPDATE menu_id=menu_id;

另外还有一种方法:

replace into menu_tab(menu_id,menu_name) values(1,'主菜单')

 等同:

delete mt from menu_tab mt where mt.menu_id = 1;
insert into menu_tab(menu_id,menu_name) values(1,'主菜单');

 此方法必须要设置主键!原理就是存在该数据就删除,然后再添加

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值