SQL Duplicate entry for key ‘PRIMARY‘主鍵重復(fù)報錯解決
錯誤原因
報錯信息“Duplicate entry '1234' for key 'USER_INFO.PRIMARY'”,嘗試插入一條數(shù)據(jù)時,主鍵值ID=1234,已經(jīng)存在于表USER_INFO中。因為鍵(Primary Key)是表中的唯一標(biāo)識符,每個記錄必須有一個唯一的主鍵值,所以報錯
例:
| ID(主鍵) | USER_NAME | ADDRESS |
|---|---|---|
| 1234 | 小紅 | 武漢 |
| 5678 | 小白 | 長沙 |
執(zhí)行如下插入sql后預(yù)期報錯
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 | 小白 | 長沙 |
2.REPLACE INTO:可以在主鍵沖突時替換現(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 | 小白 | 長沙 |
3. ON DUPLICATE KEY UPDATE:可以在主鍵沖突時更新現(xiàn)有記錄
機(jī)制:先嘗試插入數(shù)據(jù),如果發(fā)現(xiàn)主鍵沖突(或唯一索引沖突),則執(zhí)行update 操作,而不是刪除和重新插入(設(shè)想場景:批量導(dǎo)入數(shù)據(jù),如果表格中已存在主鍵相同信息,則以表格中信息為準(zhǔn),然后更新表格中的一個標(biāo)識等)
INSERT INTO USER_INFO (ID, USER_NAME, ADDRESS) VALUES (1234, '小紅', '武漢')
ON DUPLICATE KEY UPDATE USER_NAME = '小綠'
示例預(yù)期:
| ID(主鍵) | USER_NAME | ADDRESS |
|---|---|---|
| 1234 | 小綠 | 武漢 |
| 5678 | 小白 | 長沙 |
4.避免重復(fù)插入、調(diào)整表結(jié)構(gòu)
到此這篇關(guān)于SQL Duplicate entry for key ‘PRIMARY‘主鍵重復(fù)報錯解決的文章就介紹到這了,更多相關(guān)SQL 主鍵重復(fù)報錯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
強(qiáng)制SQL Server執(zhí)行計劃使用并行提升在復(fù)雜查詢語句下的性能
最近在給一個客戶做調(diào)優(yōu)的時候發(fā)現(xiàn)一個很有意思的現(xiàn)象,對于一個復(fù)雜查詢(涉及12個表)建立必要的索引后,語句使用的IO急劇下降,但執(zhí)行時間不降反升,由原來的8秒升到20秒。2014-07-07
SQL Server數(shù)據(jù)庫游標(biāo)的基本操作指南
這篇文章主要給大家介紹了關(guān)于SQL Server數(shù)據(jù)庫游標(biāo)的基本操作指南,SQL Server游標(biāo)是一種用于遍歷查詢結(jié)果集的數(shù)據(jù)庫對象,它可以逐行處理查詢結(jié)果,并執(zhí)行相關(guān)的操作,需要的朋友可以參考下2023-11-11
SQL Server 數(shù)據(jù)庫分離與附加 就這么簡單!
這篇文章主要介紹了SQL Server 數(shù)據(jù)庫分離與附加,很簡單的圖文教程,感興趣的小伙伴們可以參考一下2016-08-08

