我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mysql处理Duplicateentry‘6‘forkey‘PRIMARY‘问题及解决

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mysql处理Duplicateentry‘6‘forkey‘PRIMARY‘问题及解决

Mysql处理Duplicate entry ‘6‘ for key ‘PRIMARY‘

在业务中app和设备都需要调用ip查询对应城市的天气接口,出现了ip这个唯一索引引起的插入冲突。

以前单系统处理这种主键冲突或唯一索引冲突,都是先查询后插入。

使用 if-else语句,判断dp_city是否存在,若存在则更新,不存在则插入。

if not exists (select ip from dp_city where ip = adress)
      insert into dp_city (ip ,name,...) values(adress,name,...)
else
      update dp_city set name= 'name',... where ip = adress

但这样写不仅效率太差,每次都需要执行两条SQL语句,一条语句用来判断dp_city是否在表中已经存在,另一条语句用来插入或更新表中数据。

而且在高并发的场景下,两个请求同一时刻都查到数据不存在,一个请求先插入数据,另一个请求再插入数据时就会出现主键或索引冲突的异常,也不能保证原子性。

解决这个问题最常规的做法是:加锁 

加数据库悲观锁太影响性能;加数据库乐观锁,基于版本号判断,一般用于更新操作,像这种插入操作基本上不会用。

另一种办法是使用redis加入基于redis的分布式锁,锁定已存在的ip。但也如果过度依赖redis,若是出现网络超时,服务就悲剧了。

那么有没有更优雅高效的方法呢,通过查阅资料,发现MySQL一条语句很好的解决了这个问题:ON DUPLICATE KEY UPDATE

该语句的语法如下:

INSERT INTO tablename(field1,field2, field3, ...) VALUES(value1, value2, value3, ...) ON DUPLICATE KEY UPDATE field1=value1,field2=value2, field3=value3, ...; 

这个语法的目的是为了解决重复性,当数据库中存在某个记录时,执行这条语句会更新它,而不存在这条记录时,会插入它。

该语句规则如下:

如果你插入的记录导致一个UNIQUE索引或者primary key(主键)出现重复,那么就会认为该条记录存在,则执行update语句而不是insert语句,反之,则执行insert语句而不是更新语句。 

mysql1062错误:Duplicate entry ‘...‘ for key ‘PRIMARY

问题解释

Duplicate entry ‘…’ for key ‘PRIMARY,即插入数据时,要插入数据的主键数据(…)已经存在,不能再重复添加了。

例:Duplicate entry ‘0’ for key ‘PRIMARY是指主键为0的数据已经存在,不能再插入主键值为0的数据了。

问题解决

在执行插入操作insert前,可以先执行一遍该主键值的查找操作select

【简单的来说,就是这个语句已经执行过了,无需重复执行】

1062、1060报错都是一样的

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mysql处理Duplicateentry‘6‘forkey‘PRIMARY‘问题及解决

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Mysql的Tabledoesn'texist问题及解决

这篇文章主要介绍了Mysql的Tabledoesn'texist问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-12-22

java.Net.UnknownHostException异常处理问题解决

这篇文章主要介绍了java.Net.UnknownHostException异常处理方法,问题原因是在系统的 /etc/Hostname中配置了主机名,而在/etc/hosts文件中没有相应的配置,本文给大家详细讲解,需要的朋友可以参考下
2023-05-14

Mysql连接无效(invalidconnection)问题及解决

这篇文章主要介绍了Mysql连接无效(invalidconnection)问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-16

Python中异常处理的常见问题及解决方法

Python中异常处理的常见问题及解决方法引言:在编写程序时,很难避免出现各种各样的错误和异常。异常处理是一种机制,可以在程序运行时捕获和处理这些异常,从而保证程序的稳定性和可靠性。在Python中,异常处理是一项非常重要的技能,本文将介绍
2023-10-22

Java如何解决前端数据处理及乱码问题

本篇文章为大家展示了Java如何解决前端数据处理及乱码问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、数据处理1. 处理提交数据1.提交的名称和方法的参数名一致//localhost:8080
2023-06-22

C++中字符串处理问题及解决方法概述

C++中字符串处理问题及解决方法概述摘要:字符串处理是编程中常见的任务之一,尤其在C++中,对字符串的操作有时会遇到一些困难。本文将概述C++中常见的字符串处理问题,并提供相应的解决方法,并附上具体的代码示例。字符串长度超过限制问题描述:当
2023-10-22

图像处理中遇到的Python问题及解决方案

图像处理中遇到的Python问题及解决方案摘要:图像处理在计算机视觉和图形学领域具有广泛的应用。Python作为一种流行的编程语言,也广泛应用于图像处理中。然而,当我们在图像处理中使用Python时,可能会遇到一些常见的问题。本文将介绍一些
2023-10-22

mysql连接错误2013的问题及解决

这篇文章主要介绍了mysql连接错误2013的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-20

Mysql连接无效(invalid connection)问题及解决

目录mysql连接无效invalid connection解决的方案Mysql远程连接不生效总结Mysql连接无效invalid connection一般连接数据库的代码库都有实现连接池,如golang语言database/sql库,其中
2023-02-16

Mysql的Table doesn't exist问题及解决

目录mysql Table doesnt exist问题修改mysql数据库配置Mysql: "Table xx.XXXX doesnt exist"尝试解决lower_case_table_names 参数值我的解决方式总结Mysql T
2022-12-22

Python cx_freeze打包工具处理问题思路及解决办法

以下是在使用cx_freeze过程中遇到的问题及解决办法(Win7) 1.问题描述:运行exe,启动无数个主程序,导致系统无法使用原因:在程序中使用了multiprocessing的包解决办法:在主文件if __name__ == "__m
2022-06-04

编程热搜

目录