当前位置: 代码迷 >> MySQL >> mysql 平添(insert into)不存在插入,存在不管
  详细解决方案

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

热度:69   发布时间:2016-05-05 16:55:08.0
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,'主菜单');

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

?

?

  相关解决方案