新建一张测试表,有三个字段,自增主键id、创建了唯一索引的user_name、以及普通字段address。然后插入一条数据作为原始数据,如下所示
1、insert ignore into
基于索引字段数据进行判断,如果索引数据存在,那么忽略本次插入,完整sql为insert ignore into user(user_name,address) values('张三','上海');
,执行结果为未插入数据
2、on duplicate key update
如果索引数据存在,那么更新非索引数据的字段值,完整sql为insert into tacs_staff.user(user_name,address) values('张三','上海') on duplicate key update address = values(address);
,运行结果为更新address
3、replace into
插入数据时,如果数据存在,则删除再插入,完整sql为replace into tacs_staff.user(user_name,address) values('张三','天津');
4、insert if not exists
数据字段没有设置主键或唯一索引,当插入数据时,首先判断是否存在这条数据,不存在正常插入,存在则忽略。现在我把主键和唯一索引都去掉了。完整sql为insert into tacs_staff.user(user_name,address) select '张三','天津' from dual where not exists (select user_name from tacs_staff.user where user_name='张三');
如果把原来的数据删掉或者sql换下值,再次执行,成功插入数据