MySQL批量插入,去除重复数据
1、insert ignore into
当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回。所以使用 ignore 请确保语句本身没有问题,否则也会被忽略掉。例如:1 | INSERT IGNORE INTO user ( name ) VALUES ( 'telami' ) |
2、on duplicate key update
当 primary 或者 unique 重复时,则执行 update 语句,如 update 后为无用语句,如 id=id,则同 1 功能相同,但错误不会被忽略掉。
例如,为了实现 name 重复的数据插入不报错,可使用一下语句:
1 | INSERT INTO user ( name ) VALUES ( 'telami' ) ON duplicate KEY UPDATE age = VALUES (age) |
这种方法有个前提条件,就是,需要插入的约束,需要是主键或者唯一约束(在你的业务中那个要作为唯一的判断就将那个字段设置为唯一约束也就是 unique key)。
3、insert … select … where not exist
根据 select 的条件判断是否插入,可以不光通过 primary 和 unique 来判断,也可通过其它条件。例如:
1 | 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 相同的记录,则先删除掉。再插入新记录。
1 | REPLACE INTO user SELECT 1, 'telami' FROM books |
这种方法就是不管原来有没有相同的记录,都会先删除掉然后再插入。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了