MySQL INSERT

基础环境表说明

user测试表,主要有id,username,sex,address这4个字段,其中主键为id(自增),同时对username字段设置了唯一索引:

根据主键索引或唯一索引判断重复数据

1、insert ignore into-存在则保留原数据,忽略插入新数据

即插入数据时,如果数据存在,则忽略此次插入,前提条件是插入的数据字段设置了主键或唯一索引,SQL语句如下,当插入本条数据时,MySQL数据库会首先检索已有数据(也就是idx_username索引),如果存在,则忽略本次插入,如果不存在,则正常插入数据:

  1. insert ignore into user(username, sex, address)
  2. values ("Fcant", "man", "Beijing");

2、on duplicate key update-存在则根据主键更新内容

即插入数据时,如果数据存在,则执行更新操作,前提条件同上,也是插入的数据字段设置了主键或唯一索引,SQL语句如下,当插入本条记录时,MySQL数据库会首先检索已有数据(idx_username索引),如果存在,则执行update更新操作,如果不存在,则直接插入:

  1. insert into user(username, sex, address)
  2. values ("Fcant", "man", "Beijing")
  3. on duplicate key update
  4. sex="man", address="苏州";

3、replace into-存在则删除原数据插入新的数据进行替换

即插入数据时,如果数据存在,则删除再插入,前提条件同上,插入的数据字段需要设置主键或唯一索引,SQL语句如下,当插入本条记录时,MySQL数据库会首先检索已有数据(idx_username索引),如果存在,则先删除旧数据,然后再插入,如果不存在,则直接插入:

  1. replace into user(username, sex, address)
  2. values ("Fcant", "man", "Beijing");

适合于插入的数据字段没有设置主键或唯一索引

4、insert if not exists-存在则忽略插入,保留原数据

insert into … select … where not exist ... ,这种方式适合于插入的数据字段没有设置主键或唯一索引,当插入一条数据时,首先判断MySQL数据库中是否存在这条数据,如果不存在,则正常插入,如果存在,则忽略:

  1. insert into user(username, sex, address)
  2. select "Fcant", "man", "Beijing" from user
  3. where not exists
  4. (select username from user where username = "Fcant");