1.前言
Mysql在插入数据时,需要忽略或替换掉重复的数据(依据某个字段,比如Primary Key或
Unique Key来确定是否重复),这时候我们既可以在应用层处理,也可以使用复杂的 SQL 语句来处理(如果仅仅知道一些简单的 SQL 语法的话),当然也可以使用一些简单的 SQL 语法,不过它并不是通用所有的数据库类型。
下面我们以MySQL为例,研究一下insert 怎样去忽略或替换重复数据
2.表实例
表名称:person
表字段:
Column Name
Primary Key
Auto Increment
Unique
id
true
true
name
true
age
初始表数据:
id
name
age
111
Bruce
36
3.三个简单例子:
Note:本文的3个例子都需要被插入的表中存在
UNIQUE索引
或PRIMARY KEY
字段
1. 不存在则插入,存在则更新
1.1 on duplicate key update
如果插入的数据会导致UNIQUE 索引
或PRIMARY KEY
发生冲突/重复,则执行UPDATE
语句,例:
INSERT INTO `person`(`name`, `age`) VALUES(‘Bruce’, 18)
ON DUPLICATE KEY
UPDATE `age`=19; – If will happen conflict, the update statement is executed– 2 row(s) affected
这里受影响的行数是2
,因为数据库中存在name='
Bruce'
的数据,如果不存在此条数据,则受影响的行数为1。
最新的表数据如下:
id
name
age
1
Bruce
18
1.2 replace into
如果插入的数据会导致UNIQUE 索引
或PRIMARY KEY
发生冲突/重复,则先删除旧数据再插入最新的数据,例:
REPLACE INTO `person`(`name`, `age`) VALUES(‘Bruce’, 20);
– 2 row(s) affected
这里受影响的行数是2
,因为数据库中存在name='Jack'
的数据,并且id
的值会变成2
,因为它是先删除旧数据,然后再插入数据,最新的表数据如下:
id
name
age
2
Bruce
20