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,'主菜单');

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

猜你喜欢

转载自shendixiong.iteye.com/blog/2227416