• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

小菜鸡记录

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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

这种方法就是不管原来有没有相同的记录,都会先删除掉然后再插入。

posted on 2023-04-27 10:48  罗宏  阅读(618)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3