SQL Duplicate entry for key ‘PRIMARY‘主鍵重復(fù)報(bào)錯(cuò)解決
錯(cuò)誤原因
報(bào)錯(cuò)信息“Duplicate entry '1234' for key 'USER_INFO.PRIMARY'”,嘗試插入一條數(shù)據(jù)時(shí),主鍵值ID=1234,已經(jīng)存在于表USER_INFO中。因?yàn)殒I(Primary Key)是表中的唯一標(biāo)識(shí)符,每個(gè)記錄必須有一個(gè)唯一的主鍵值,所以報(bào)錯(cuò)
例:
ID(主鍵) | USER_NAME | ADDRESS |
---|---|---|
1234 | 小紅 | 武漢 |
5678 | 小白 | 長(zhǎng)沙 |
執(zhí)行如下插入sql后預(yù)期報(bào)錯(cuò)
INSERT INTO USER_INFO (ID, USER_NAME, ADDRESS) VALUES (1234, '小紅', '武漢');
解決方案
1. INSERT IGNORE:忽略重復(fù)的插入操作,插入無效
機(jī)制:遇到主鍵沖突不進(jìn)行任何操作
示例預(yù)期:
INSERT IGNORE USER_INFO (ID, USER_NAME, ADDRESS) VALUES (1234, '小紅', '武漢');
ID(主鍵) | USER_NAME | ADDRESS |
---|---|---|
1234 | 小紅 | 武漢 |
5678 | 小白 | 長(zhǎng)沙 |
2.REPLACE INTO:可以在主鍵沖突時(shí)替換現(xiàn)有記錄
機(jī)制:先嘗試插入數(shù)據(jù),如果發(fā)現(xiàn)主鍵沖突(或唯一索引沖突),則刪除沖突的現(xiàn)有行,然后插入新行
示例預(yù)期:
REPLACE INTO USER_INFO (ID, USER_NAME, ADDRESS) VALUES (1234, '小綠', '北京');
ID(主鍵) | USER_NAME | ADDRESS |
---|---|---|
1234 | 小綠 | 北京 |
5678 | 小白 | 長(zhǎng)沙 |
3. ON DUPLICATE KEY UPDATE:可以在主鍵沖突時(shí)更新現(xiàn)有記錄
機(jī)制:先嘗試插入數(shù)據(jù),如果發(fā)現(xiàn)主鍵沖突(或唯一索引沖突),則執(zhí)行update 操作,而不是刪除和重新插入(設(shè)想場(chǎng)景:批量導(dǎo)入數(shù)據(jù),如果表格中已存在主鍵相同信息,則以表格中信息為準(zhǔn),然后更新表格中的一個(gè)標(biāo)識(shí)等)
INSERT INTO USER_INFO (ID, USER_NAME, ADDRESS) VALUES (1234, '小紅', '武漢')
ON DUPLICATE KEY UPDATE USER_NAME = '小綠'
示例預(yù)期:
ID(主鍵) | USER_NAME | ADDRESS |
---|---|---|
1234 | 小綠 | 武漢 |
5678 | 小白 | 長(zhǎng)沙 |
4.避免重復(fù)插入、調(diào)整表結(jié)構(gòu)
到此這篇關(guān)于SQL Duplicate entry for key ‘PRIMARY‘主鍵重復(fù)報(bào)錯(cuò)解決的文章就介紹到這了,更多相關(guān)SQL 主鍵重復(fù)報(bào)錯(cuò)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
jdbc使用PreparedStatement批量插入數(shù)據(jù)的方法
這篇文章主要介紹了jdbc使用PreparedStatement批量插入數(shù)據(jù)的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04必須會(huì)的SQL語句(二) 創(chuàng)建表、修改表結(jié)構(gòu)、刪除表
這篇文章主要介紹了sqlserver中創(chuàng)建表、修改表結(jié)構(gòu)、刪除表的sql語句,需要的朋友可以參考下2015-01-01SQL中函數(shù) replace 的參數(shù)1的數(shù)據(jù)類型ntext無效的解決方法
SQL中函數(shù) replace 的參數(shù) 1 的數(shù)據(jù)類型 ntext 無效。找了半天找到了解決辦法2010-06-06SQL Server 存儲(chǔ)過程遇到“表 ''''#TT'''' 沒有標(biāo)識(shí)屬性無法執(zhí)行 SET 操作”錯(cuò)誤
這篇文章主要介紹了SQL Server 存儲(chǔ)過程遇到“表 '#TT' 沒有標(biāo)識(shí)屬性無法執(zhí)行 SET 操作”錯(cuò)誤 的相關(guān)資料,需要的朋友可以參考下2016-07-07sql server實(shí)現(xiàn)分頁的方法實(shí)例分析
這篇文章主要介紹了sql server實(shí)現(xiàn)分頁的方法,結(jié)合實(shí)例形式總結(jié)分析了SQL Server實(shí)現(xiàn)分頁功能的常用sql語句,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03sql函數(shù)實(shí)現(xiàn)去除字符串中的相同的字符串
去除字符串中的相同的字符,此功能在開發(fā)過程中很實(shí)用,為此本文整理了一些,希望對(duì)你了解它有所幫助2013-01-01