小红书秋天的第一波热点,你蹭到了吗?

如何在集群模式下安装zookeeper

  返回  

MySql 批量插入,解决重复值问题

2021/8/20 13:38:25 浏览:

MySql 批量插入

使用场景:
在需要批量插入大量的数据,判断数据是否重复。

1. insert ignore into

当插入数据时,如果出现错误时,如重复数据,将不返回错误,只是以警告的形式返回。所以在使用 ignore前请确保语句本身没有问题,否则也会被忽略掉

例如:

insert ignore into user(name) values('admin');

有可能会导致不是因为重复数据报错, 而是因为其他原因报错而被忽略掉了

2. on duplicate key update

注意:当primary 或者 unique 重复时,则执行 update 语句,如update后为无用语句。如 id = id,则同1 功能相同,但错误不会被忽略掉。

例如:
为了实现 name 重复的数据插入不报错,可以使用以下语句

insert into user(name) value('admin') on duplicate key update id = id

注意:这种方法有个前提条件,就是需要约束。主键或者唯一约束,来确保当数据重复时能根据约束来更新值。

3. insert … select … where not exist

根据select 的条件判断是否插入

insert into user(name) select 'admin' from 另外一张表 where not exists (select id from user where id = 1)

注意:这里使用的是子查询(临时表的方式),效率会有影响

4. replace into

如果存在 primary or unique 相同的记录,则先删除掉,再插入记录。

replace into user select 1,'admin' fom user

注意:不管原来有没有相同的记录,都会删除掉然后再插入

附带一下笔记:
创建索引的三种方式

1. 创建表的同时创建索引

例如:

create table user(
	id int primary key,
	name varchar(50),
	phone varchar(50),
	unique index unique_index_phone(索引名) (phone(字段名)) //唯一索引
	index index_id(id) // 普通索引
)

2. 在已经建好的表中添加索引

例如:

// 普通索引
create index 索引名 on 表名(字段名);

// 唯一索引
create unique index 索引名 on 表名(字段名);

// 全文索引
create fulltext index 索引名 on 表名(字段名)

// 多列索引,复合索引
create index 索引名 on 表名(字段1,字段2...);

3. 以修改表的方式添加索引

例如:

// 普通索引
alter table 表名 add index 索引名(字段名);

// 唯一索引
alter table 表名 add unique index 索引名(字段名);

// 全文索引
alter table 表名 add fulltext index 索引名(字段名);

查看某张表的索引:

show index from 表名;

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号