Mysql 如何保证不插入重复列

在大数据环境中,如何高效地插入数据并避免重复是一个关键问题。本文介绍了4种MySQL方法来解决这个问题:1) INSERT IGNORE,自动忽略已存在的数据;2) REPLACE INTO,先删除再插入;3) ON DUPLICATE KEY UPDATE,重复时更新已有数据;4) INSERT...SELECT...WHERE NOT EXISTS,根据特定条件判断插入。这些方法各有优缺点,适用于不同场景,可在数据量大时提高程序效率。
Mysql 避免插入重复数据

在日常开发中,肯定会碰到很多业务会有批量插入值,数据源可能是其他数据库的表,也可能是Excel。

那么问题来了,是不是每次插入之前都要查一遍,看看重不重复,在代码里筛选一下数据,重复的就过滤掉呢?

向大数据数据库中插入值时,还要判断插入是否重复,然后插入。那么如何提高效率呢?

看来这个问题不止我一个人苦恼过。

解决的办法有很多种,不同的场景解决方案也不一样,数据量很小的情况下,怎么搞都行,但是数据量很大的时候,这就不是一个简单的问题了。几百万的数据,不可能查出来,再做去重处理,大大的影响了程序的整体效率。

1. insert ignore

insert ignore 会自动忽略数据库已经存在的数据(根据主键或者唯一索引判断),如果没有数据就插入数据,如果有数据就跳过插入这条数据。

INSERT IGNORE INTO user (字段) VALUES ('value')
2. replace into

replace into 首先尝试插入数据到表中

  1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。
  2. 否则,直接插入新数据。
REPLACE INTO user (字段) VALUES ('value')
3. on duplicate key update

on duplicate key update 如果在insert into语句的末尾指定了on duplicate key update + 字段更新,则会在出现重复数据(根据主键或者唯一索引判断)的时候按照后面字段更新的描述对该信息进行更新操作。

-- 如果update后面无用语句 则和insert ignore功能相同
INSERT INTO user (字段) VALUES ('value') ON duplicate KEY UPDATE id = id
-- 如果重复 则重复数据会按照update后面的字段修改
INSERT INTO user (字段) VALUES ('value') ON duplicate KEY UPDATE ('value')
4. insert … select … where not exist

根据select的条件判断是否插入,可以不光通过primary 和unique来判断,也可通过其它条件。

INSERT INTO user (name) SELECT 'telami' FROM dual WHERE NOT EXISTS (SELECT id FROM user WHERE id = 1)

以上四种方法是从db层来实现的,各有利弊,可以按照自己的需求来选择。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值