MySQL批量插入唯一索引冲突的几种避免办法

 更新时间:2024年02月21日 10:47:18   作者:MinggeQingchun  
我们在进行大批量的数据插入时,遇到唯一索引冲突是经常的事,本文主要介绍了MySQL批量插入唯一索引冲突的几种避免办法,具有一定的参考价值,感兴趣的可以了解一下

我们在进行大批量的数据插入时,遇到唯一索引冲突是经常的事,报错如下:

java.util.concurrent.ExecutionException: org.springframework.dao.DuplicateKeyException: 
### Error updating database.  Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '1122-zhangsan' for key 'idx_no_name'

在MySQL中有4种方法可以避免唯一索引冲突

(一)导入差异数据,忽略重复数据,IGNORE INTO的使用

(二)导入并覆盖重复数据,REPLACE INTO 的使用

(三)导入保留重复数据未指定字段,INSERT INTO ON DUPLICATE KEY UPDATE 的使用

表 test1

1、insert ignore into

INSERTIGNORE语句可以在插入数据时忽略唯一索引冲突的错误,而不会中断插入过程。

如果插入的数据存在唯一索引冲突,那么MySQL将忽略该行的插入操作,继续插入下—行数据。

INSERT IGNORE INTO table_name (column1, column2, ...)
VALUES (valuel, value2, ...),...

2、replace into

REPLACE语句可以用于插入新行或替换已存在的行。

如果存在primary or unique相同的记录,则先删除掉。再插入新记录

如果插入的数据存在唯一索引冲突,那么MySQL将删除已存在的行,并插入新行。

这种方法就是不管原来有没有相同的记录,都会先删除掉然后再插入。这意味着插入操作总是成功的,但可能导致数据丢失

REPLACE INTO table_name (columnl, column2, ...)
VALUES (valuel, value2, ...),...

3、on duplicate key update

当primary或者unique重复时,则执行update语句,如update后为无用语句,

如id=id,则同1功能相同,但错误不会被忽略掉。例如,为了实现name重复的数据插入不报错,可使用一下语句:

INTO table_name (columnl, column2, ...)
VALUES (valuel, value2, ...),...
ON duplicate KEY UPDATE id = id

这种方法有个前提条件,就是,需要插入的约束,需要是主键或者唯一约束。

4、insert … select … where not exist

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

INSERT INTO books (name) SELECT 'MySQL Manual' 
FROM dual 
WHERE NOT EXISTS (SELECT id FROM books WHERE id = 1)

这种方法貌似写这很繁琐

INSERT INTO order (orderId ) VALUES
SELECT '500002' FROM DUAL WHERE NOT EXISTS (
SELECT * FROM order WHERE orderId='500002'
)

到此这篇关于MySQL批量插入唯一索引冲突的几种避免办法的文章就介绍到这了,更多相关MySQL避免唯一索引冲突内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 细数MySQL中SQL语句的分类

    细数MySQL中SQL语句的分类

    下面小编就为大家带来一篇细数MySQL中SQL语句的分类。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • MySQL数据库中的TRUNCATE TABLE命令详解

    MySQL数据库中的TRUNCATE TABLE命令详解

    这篇文章主要给大家介绍了关于MySQL数据库中TRUNCATE TABLE命令的相关资料,Truncate Table“清空表”的意思,它对数据库中的表进行清空操作,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-05-05
  • MySQL忘记root密码以及远程无法连接的解决方法

    MySQL忘记root密码以及远程无法连接的解决方法

    这篇文章主要介绍了MySQL忘记root密码以及远程无法连接问题的解决方法,文中有详细的代码示例来解决这些办法,需要的朋友可以参考下
    2023-06-06
  • 深入分析mysql为什么不推荐使用uuid或者雪花id作为主键

    深入分析mysql为什么不推荐使用uuid或者雪花id作为主键

    这篇文章主要介绍了深入分析mysql为什么不推荐使用uuid或者雪花id作为主键,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • MySQL server has gone away错误提示解决方法

    MySQL server has gone away错误提示解决方法

    今天遇到类似的情景,MySQL只是冷冷的说:MySQL server has gone away。
    2008-11-11
  • Mysql给普通分页查询结果加序号实操

    Mysql给普通分页查询结果加序号实操

    这篇文章主要介绍了Mysql给普通分页查询结果加序号实操,文章通过围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • MySQL运维实战使用RPM进行安装部署

    MySQL运维实战使用RPM进行安装部署

    这篇文章主要为大家介绍了MySQL运维实战使用RPM进行安装部署实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • 详解mysql触发器trigger实例

    详解mysql触发器trigger实例

    这篇文章主要为大家介绍了mysql触发器trigger实例 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • MySQL MHA 运行状态监控介绍

    MySQL MHA 运行状态监控介绍

    这篇文章主要介绍MySQL MHA 运行状态监控,MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能,想具体了解的小伙伴可以和小编一起学习下面文章内容
    2021-10-10
  • MySQL基础入门之Case语句用法实例

    MySQL基础入门之Case语句用法实例

    case语句是mysql中的一个条件语句,可以在字段中使用case语句进行复杂的筛选以及构造新的字段,下面这篇文章主要给大家介绍了关于MySQL基础入门之Case语句用法的相关资料,需要的朋友可以参考下
    2022-08-08

最新评论