基础环境表说明
user测试表,主要有id,username,sex,address这4个字段,其中主键为id(自增),同时对username字段设置了唯一索引:
根据主键索引或唯一索引判断重复数据
1、insert ignore into
-存在则保留原数据,忽略插入新数据
即插入数据时,如果数据存在,则忽略此次插入,前提条件是插入的数据字段设置了主键或唯一索引,SQL语句如下,当插入本条数据时,MySQL数据库会首先检索已有数据(也就是idx_username索引),如果存在,则忽略本次插入,如果不存在,则正常插入数据:
insert ignore into user(username, sex, address)
values ("Fcant", "man", "Beijing");
2、on duplicate key update
-存在则根据主键更新内容
即插入数据时,如果数据存在,则执行更新操作,前提条件同上,也是插入的数据字段设置了主键或唯一索引,SQL语句如下,当插入本条记录时,MySQL数据库会首先检索已有数据(idx_username索引),如果存在,则执行update更新操作,如果不存在,则直接插入:
insert into user(username, sex, address)
values ("Fcant", "man", "Beijing")
on duplicate key update
sex="man", address="苏州";
3、replace into
-存在则删除原数据插入新的数据进行替换
即插入数据时,如果数据存在,则删除再插入,前提条件同上,插入的数据字段需要设置主键或唯一索引,SQL语句如下,当插入本条记录时,MySQL数据库会首先检索已有数据(idx_username索引),如果存在,则先删除旧数据,然后再插入,如果不存在,则直接插入:
replace into user(username, sex, address)
values ("Fcant", "man", "Beijing");
适合于插入的数据字段没有设置主键或唯一索引
4、insert if not exists
-存在则忽略插入,保留原数据
即insert into … select … where not exist ...
,这种方式适合于插入的数据字段没有设置主键或唯一索引,当插入一条数据时,首先判断MySQL数据库中是否存在这条数据,如果不存在,则正常插入,如果存在,则忽略:
insert into user(username, sex, address)
select "Fcant", "man", "Beijing" from user
where not exists
(select username from user where username = "Fcant");