mysql中避免重复插入记录方法

来源:互联网 发布:sql update 多个where 编辑:程序博客网 时间:2024/05/16 19:17

本经验给大家提供三种在mysql中避免重复插入记录方法,主要是讲到了ignore,replace,on duplicate key update三种方法。大家可以参考使用。

1、使用ignore关键字.

主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用。

如果使用一般的插入,则会报主键重复的错。Duplicate entry '1' for key 'PRIMARY'


2、如果使用代有ignore的插入语句:INSERT IGNORE INTO t_ignore (`id`, `name`, `mark`) VALUES (1, 'test1', '测试');

这样当有重复记录就会忽略,执行后返回数字0


3、还有就是复制表时也可以使用ignore,避免重复记录:

INSERT IGNORE  INTO t_ignore (`id`, `name`, `mark`) 

SELECT id, name,mark from t_ignore_test 


4、使用Replace

REPLACE的运行与INSERT很相像,但是如果旧记录与新记录有相同的值,则在新记录被插入之前,旧记录被删除。

使用语法:

REPLACE INTO `table_name`(`col_name`, ...) VALUES (...);

REPLACE INTO `table_name` (`col_name`, ...) SELECT ...;

REPLACE INTO `table_name` SET `col_name`='value'


5、使用on duplicate key update

如‍上,你也可以在insert into…..后面加上 on duplicate key update方法来实现。如果您指定了on duplicate key update,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行update操作。

例如:name为unique,有一列name值为test1了,执行一下sql

insert into t_ignore(id,name,mark) values (1,'test1','test1') on duplicate key update mark='ccc'; 

则等同于

update t_ignore set mark='cc' WHERE name='test1';


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




原创粉丝点击