欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql處理Duplicate entry ‘6‘ for key ‘PRIMARY‘問(wèn)題及解決

 更新時(shí)間:2022年06月06日 09:57:54   作者:net亮  
這篇文章主要介紹了Mysql處理Duplicate entry ‘6‘ for key ‘PRIMARY‘問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

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

在業(yè)務(wù)中app和設(shè)備都需要調(diào)用ip查詢對(duì)應(yīng)城市的天氣接口,出現(xiàn)了ip這個(gè)唯一索引引起的插入沖突。

以前單系統(tǒng)處理這種主鍵沖突或唯一索引沖突,都是先查詢后插入。

使用 if-else語(yǔ)句,判斷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

但這樣寫不僅效率太差,每次都需要執(zhí)行兩條SQL語(yǔ)句,一條語(yǔ)句用來(lái)判斷dp_city是否在表中已經(jīng)存在,另一條語(yǔ)句用來(lái)插入或更新表中數(shù)據(jù)。

而且在高并發(fā)的場(chǎng)景下,兩個(gè)請(qǐng)求同一時(shí)刻都查到數(shù)據(jù)不存在,一個(gè)請(qǐng)求先插入數(shù)據(jù),另一個(gè)請(qǐng)求再插入數(shù)據(jù)時(shí)就會(huì)出現(xiàn)主鍵或索引沖突的異常,也不能保證原子性。

解決這個(gè)問(wèn)題最常規(guī)的做法是:加鎖 

加數(shù)據(jù)庫(kù)悲觀鎖太影響性能;加數(shù)據(jù)庫(kù)樂(lè)觀鎖,基于版本號(hào)判斷,一般用于更新操作,像這種插入操作基本上不會(huì)用。

另一種辦法是使用redis加入基于redis的分布式鎖,鎖定已存在的ip。但也如果過(guò)度依賴redis,若是出現(xiàn)網(wǎng)絡(luò)超時(shí),服務(wù)就悲劇了。

那么有沒(méi)有更優(yōu)雅高效的方法呢,通過(guò)查閱資料,發(fā)現(xiàn)MySQL一條語(yǔ)句很好的解決了這個(gè)問(wèn)題:ON DUPLICATE KEY UPDATE

該語(yǔ)句的語(yǔ)法如下:

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

這個(gè)語(yǔ)法的目的是為了解決重復(fù)性,當(dāng)數(shù)據(jù)庫(kù)中存在某個(gè)記錄時(shí),執(zhí)行這條語(yǔ)句會(huì)更新它,而不存在這條記錄時(shí),會(huì)插入它。

該語(yǔ)句規(guī)則如下:

如果你插入的記錄導(dǎo)致一個(gè)UNIQUE索引或者primary key(主鍵)出現(xiàn)重復(fù),那么就會(huì)認(rèn)為該條記錄存在,則執(zhí)行update語(yǔ)句而不是insert語(yǔ)句,反之,則執(zhí)行insert語(yǔ)句而不是更新語(yǔ)句。 

mysql1062錯(cuò)誤:Duplicate entry ‘...‘ for key ‘PRIMARY

問(wèn)題解釋

Duplicate entry ‘…’ for key ‘PRIMARY,即插入數(shù)據(jù)時(shí),要插入數(shù)據(jù)的主鍵數(shù)據(jù)(…)已經(jīng)存在,不能再重復(fù)添加了。

例:Duplicate entry ‘0’ for key ‘PRIMARY是指主鍵為0的數(shù)據(jù)已經(jīng)存在,不能再插入主鍵值為0的數(shù)據(jù)了。

問(wèn)題解決

在執(zhí)行插入操作insert前,可以先執(zhí)行一遍該主鍵值的查找操作select

【簡(jiǎn)單的來(lái)說(shuō),就是這個(gè)語(yǔ)句已經(jīng)執(zhí)行過(guò)了,無(wú)需重復(fù)執(zhí)行】

1062、1060報(bào)錯(cuò)都是一樣的

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL啟動(dòng)錯(cuò)誤解決方法

    MySQL啟動(dòng)錯(cuò)誤解決方法

    本文給大家分享的是mysql啟動(dòng)時(shí)報(bào)錯(cuò)的排查過(guò)程及方法,非常實(shí)用,有相同問(wèn)題的小伙伴可以來(lái)參考下
    2016-12-12
  • MySQL數(shù)據(jù)庫(kù)中的安全設(shè)置方案

    MySQL數(shù)據(jù)庫(kù)中的安全設(shè)置方案

    MySQL 是一個(gè)真正的多用戶、多線程SQL數(shù)據(jù)庫(kù)服務(wù)器,它是一個(gè)客戶機(jī)/服務(wù)器結(jié)構(gòu)的實(shí)現(xiàn)。MySQL是現(xiàn)在流行的關(guān)系數(shù)據(jù)庫(kù)中其中的一種,相比其它的數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)來(lái)說(shuō),MySQL具有小巧、功能齊全、查詢迅捷等優(yōu)點(diǎn)。MySQL 主要目標(biāo)是快速、健壯和易用。
    2015-04-04
  • Mysql 索引結(jié)構(gòu)直觀圖解介紹

    Mysql 索引結(jié)構(gòu)直觀圖解介紹

    Mysql-索引結(jié)構(gòu)直觀圖解。上一篇?jiǎng)倓偼ㄋ谆恼f(shuō)明了B-TREE的幾個(gè)結(jié)果與存儲(chǔ)方式,其實(shí)跟索引感覺(jué)上還是沒(méi)有關(guān)聯(lián)起來(lái), 那么本篇,就通過(guò)實(shí)際的一個(gè)數(shù)據(jù)行的例子,說(shuō)明一下
    2016-12-12
  • 淺談MySQL表空間回收的正確姿勢(shì)

    淺談MySQL表空間回收的正確姿勢(shì)

    隨著時(shí)間的推移,表里面的數(shù)據(jù)越來(lái)越多,表數(shù)據(jù)文件越來(lái)越大,數(shù)據(jù)庫(kù)占用的空間自然也逐漸增長(zhǎng),本文主要介紹了MySQL表空間回收,感興趣的可以了解一下
    2021-09-09
  • MySQL實(shí)現(xiàn)每天定時(shí)12點(diǎn)彈出黑窗口

    MySQL實(shí)現(xiàn)每天定時(shí)12點(diǎn)彈出黑窗口

    這篇文章主要介紹了MySQL實(shí)現(xiàn)每天定時(shí)12點(diǎn)彈出黑窗口問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • MySQL如何查詢數(shù)據(jù)庫(kù)中所有表名及注釋等信息

    MySQL如何查詢數(shù)據(jù)庫(kù)中所有表名及注釋等信息

    這篇文章主要介紹了MySQL如何查詢數(shù)據(jù)庫(kù)中所有表名及注釋等信息問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 詳解MySQL實(shí)現(xiàn)主從復(fù)制過(guò)程

    詳解MySQL實(shí)現(xiàn)主從復(fù)制過(guò)程

    這篇文章主要為大家詳細(xì)介紹了MySQL主從復(fù)制的實(shí)現(xiàn)過(guò)程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Django連接本地mysql數(shù)據(jù)庫(kù)(pycharm)的步驟

    Django連接本地mysql數(shù)據(jù)庫(kù)(pycharm)的步驟

    這篇文章主要介紹了Django連接本地mysql數(shù)據(jù)庫(kù)(pycharm)的步驟,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • mysql聚集索引、輔助索引、覆蓋索引、聯(lián)合索引的使用

    mysql聚集索引、輔助索引、覆蓋索引、聯(lián)合索引的使用

    本文主要介紹了mysql聚集索引、輔助索引、覆蓋索引、聯(lián)合索引的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • MySQL中的回表和索引覆蓋示例詳解

    MySQL中的回表和索引覆蓋示例詳解

    索引覆蓋是一種避免回表查詢的優(yōu)化策略,具體的做法就是將要查詢的數(shù)據(jù)作為索引列建立普通索,下面這篇文章主要給大家介紹了關(guān)于MySQL中回表和索引覆蓋的相關(guān)資料,需要的朋友可以參考下
    2021-09-09

最新評(píng)論