SQL Duplicate entry for key ‘PRIMARY‘主键重复报错解决

 更新时间:2024年11月05日 10:37:59   作者:素人依偎  
解决SQL主键重复报错的几种方法包括使用INSERT IGNORE、REPLACE INTO、ON DUPLICATE KEY UPDATE等,本文就来介绍一下问题解决,感兴趣的可以了解一下

错误原因

报错信息“Duplicate entry '1234' for key 'USER_INFO.PRIMARY'”,尝试插入一条数据时,主键值ID=1234,已经存在于表USER_INFO中。因为键(Primary Key)是表中的唯一标识符,每个记录必须有一个唯一的主键值,所以报错

例:

ID(主键)USER_NAMEADDRESS
1234小红武汉
5678小白长沙

执行如下插入sql后预期报错

 INSERT INTO USER_INFO (ID, USER_NAME, ADDRESS)  VALUES (1234, '小红', '武汉');

解决方案

1. INSERT IGNORE:忽略重复的插入操作,插入无效

机制:遇到主键冲突不进行任何操作

示例预期

INSERT IGNORE USER_INFO (ID, USER_NAME, ADDRESS)  VALUES (1234, '小红', '武汉');

ID(主键)USER_NAMEADDRESS
1234小红武汉
5678小白长沙

2.REPLACE INTO:可以在主键冲突时替换现有记录

机制:先尝试插入数据,如果发现主键冲突(或唯一索引冲突),则删除冲突的现有行,然后插入新行

示例预期

REPLACE INTO  USER_INFO (ID, USER_NAME, ADDRESS)  VALUES (1234, '小绿', '北京');

ID(主键)USER_NAMEADDRESS
1234小绿北京
5678小白长沙

3. ON DUPLICATE KEY UPDATE:可以在主键冲突时更新现有记录

机制:先尝试插入数据,如果发现主键冲突(或唯一索引冲突),则执行update 操作,而不是删除和重新插入(设想场景:批量导入数据,如果表格中已存在主键相同信息,则以表格中信息为准,然后更新表格中的一个标识等)

INSERT INTO USER_INFO (ID, USER_NAME, ADDRESS)  VALUES (1234, '小红', '武汉') 

ON DUPLICATE KEY UPDATE USER_NAME = '小绿' 

示例预期

ID(主键)USER_NAMEADDRESS
1234小绿武汉
5678小白长沙

4.避免重复插入、调整表结构

到此这篇关于SQL Duplicate entry for key ‘PRIMARY‘主键重复报错解决的文章就介绍到这了,更多相关SQL 主键重复报错内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL中的SELECT FOR UPDATE的用法

    MySQL中的SELECT FOR UPDATE的用法

    MySQL的SELECT FOR UPDATE用于事务中锁定行,防止并发修改,确保数据一致性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-06-06
  • 删除Table表中的重复行的方法

    删除Table表中的重复行的方法

    在写SQL的时候经常会有这样的需求: 在一个Table中会有多条重复的数据,如何有效的取出来不重复的数据,或者是删除掉重复的数据,或者取出某列重复值的第一条数据.
    2010-06-06
  • SQL中查找某几个字段完全一样的数据

    SQL中查找某几个字段完全一样的数据

    本文分享SQL语句实现表中字段的组合累加排序的实例代码,希望能给大家做一个参考。
    2016-06-06
  • 关于SQL Server加密与解密的问题

    关于SQL Server加密与解密的问题

    这篇文章主要介绍了SQL Server加密与解密的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 强制SQL Server执行计划使用并行提升在复杂查询语句下的性能

    强制SQL Server执行计划使用并行提升在复杂查询语句下的性能

    最近在给一个客户做调优的时候发现一个很有意思的现象,对于一个复杂查询(涉及12个表)建立必要的索引后,语句使用的IO急剧下降,但执行时间不降反升,由原来的8秒升到20秒。
    2014-07-07
  • SQL Server只取年月日和获取月初月末简单举例

    SQL Server只取年月日和获取月初月末简单举例

    这篇文章主要给大家介绍了关于SQL Server只取年月日和获取月初月末的相关资料,在SQL Server中截取日期中的年月可以通过内置函数来实现,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • SQL Server数据库游标的基本操作指南

    SQL Server数据库游标的基本操作指南

    这篇文章主要给大家介绍了关于SQL Server数据库游标的基本操作指南,SQL Server游标是一种用于遍历查询结果集的数据库对象,它可以逐行处理查询结果,并执行相关的操作,需要的朋友可以参考下
    2023-11-11
  • SQL Server 数据库分离与附加 就这么简单!

    SQL Server 数据库分离与附加 就这么简单!

    这篇文章主要介绍了SQL Server 数据库分离与附加,很简单的图文教程,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Sql2000与Sql2005共存安装的解决方法

    Sql2000与Sql2005共存安装的解决方法

    首先说明的是两个版本的数据库安装次序没有先后之分,主要后一安装版本一定要另外创建实例,就可以并存。
    2011-03-03
  • SQL查询中按多个字段排序的方法

    SQL查询中按多个字段排序的方法

    本文主要介绍了SQL查询中按多个字段排序的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07

最新评论