mysql避免重复插入的三种方式

Thu Oct 29 15:12:05 CST 2015 783 MySQL

文章摘要在Mysql中,主键、唯一索引的字段都不允许插入重复值,可是在开发中,往往在执行插入语句之前并不知道表中已经有重复的值了,容易发生SQL错误,导致严重后果。本文介绍三种忽略唯一字段冲突的方法。

Mysql中,避免重复插入冲突的三种方式分别为:

方案一:使用 ignore 

方案二:使用 replace into

方案三:使用on duplicate key update


1.ignore关键字

insert ignore into table_name(col1,col2...) values(val1,val2...)

语句执行时,当发现主键或唯一索引字段有重复的值,那么该行不会插入到表中,执行后返回数字为0,指示语句执行后,受影响的行数为0


2.replace into

replace into table_name(col1,col2...) values(val1,val2...) 
replace into table_name set col1=val1, ...

replace执行时,如果发现主键或唯一索引字段有重复值,会先将旧记录删除,再插入新记录。若表没有PRIMARY KEY或UNIQUE索引,使用REPLACE语句是没有意义的,因为在这种情况下该语句会与INSERT相同。


3.on duplicate key update

假设a字段为unique key,那么下面两句执行后的效果一样:

insert into table (a,b,c) values(1,2,3) on duplicate key update c=c+1; 

update table set c=c+1 where a=1;

如果在insert 语句末尾指定了on duplicate key update,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行update;如果不会导致唯一值列重复的问题,则插入新行。

如果行作为新记录被插入,则受影响行的值显示1;如果原有的记录被更新,则受影响行的值显示2。


打赏
打赏

分享到: