Mysql 避免插入重复数据
在日常开发中,肯定会碰到很多业务会有批量插入值,数据源可能是其他数据库的表,也可能是Excel。
那么问题来了,是不是每次插入之前都要查一遍,看看重不重复,在代码里筛选一下数据,重复的就过滤掉呢?
向大数据数据库中插入值时,还要判断插入是否重复,然后插入。那么如何提高效率呢?
看来这个问题不止我一个人苦恼过。
解决的办法有很多种,不同的场景解决方案也不一样,数据量很小的情况下,怎么搞都行,但是数据量很大的时候,这就不是一个简单的问题了。几百万的数据,不可能查出来,再做去重处理,大大的影响了程序的整体效率。
1. insert ignore
insert ignore 会自动忽略数据库已经存在的数据(根据主键或者唯一索引判断),如果没有数据就插入数据,如果有数据就跳过插入这条数据。
INSERT IGNORE INTO user (字段) VALUES ('value')
2. replace into
replace into 首先尝试插入数据到表中
- 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。
- 否则,直接插入新数据。
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层来实现的,各有利弊,可以按照自己的需求来选择。
在大数据环境中,如何高效地插入数据并避免重复是一个关键问题。本文介绍了4种MySQL方法来解决这个问题:1) INSERT IGNORE,自动忽略已存在的数据;2) REPLACE INTO,先删除再插入;3) ON DUPLICATE KEY UPDATE,重复时更新已有数据;4) INSERT...SELECT...WHERE NOT EXISTS,根据特定条件判断插入。这些方法各有优缺点,适用于不同场景,可在数据量大时提高程序效率。
1271

被折叠的 条评论
为什么被折叠?



