MySQL批量插入,去除重复数据
1、insert ignore into
当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回。所以使用 ignore 请确保语句本身没有问题,否则也会被忽略掉。例如:INSERT IGNORE INTO user (name) VALUES ('telami')
2、on duplicate key update
当 primary 或者 unique 重复时,则执行 update 语句,如 update 后为无用语句,如 id=id,则同 1 功能相同,但错误不会被忽略掉。
例如,为了实现 name 重复的数据插入不报错,可使用一下语句:
INSERT INTO user (name) VALUES ('telami') ON duplicate KEY UPDATE age = VALUES(age)
这种方法有个前提条件,就是,需要插入的约束,需要是主键或者唯一约束(在你的业务中那个要作为唯一的判断就将那个字段设置为唯一约束也就是 unique key)。
3、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)
这种方法其实就是使用了 mysql 的一个临时表的方式,但是里面使用到了子查询,效率也会有一点点影响,如果能使用上面的就不使用这个。
4、replace into
如果存在 primary or unique 相同的记录,则先删除掉。再插入新记录。
REPLACE INTO user SELECT 1, 'telami' FROM books
这种方法就是不管原来有没有相同的记录,都会先删除掉然后再插入。