MySql報錯:Duplicate entry ‘10‘ for key ‘PRIMARY‘的解決方案
翻譯錯誤
經(jīng)常遇到這個問題,今天我把這個問題記錄下來,以后如果有其他人遇到相同的問題,不至于困惑。我自己也作為一種學習中的出錯記錄,錯題本,提醒自己。
在操作數(shù)據(jù)庫的時候,經(jīng)常會出現(xiàn)Duplicate entry ‘10’ for key 'PRIMARY’這樣的報錯,這是什么意思呢?
我去翻譯了一下,翻譯結(jié)果如下:
所以這種問題的出現(xiàn)就代表鍵名重復了
先正常制作表格
定義表格表頭的時候,一般會設(shè)置id為主鍵(因為id具有唯一性,且簡單)
以下是用Navicat Premium 16制作的一個表格
錯一遍(體驗報錯)
在此表格中,id已經(jīng)有1,2,3,4,5,6,7,8了,如果此時我插入的數(shù)據(jù)主鍵是8,就會出現(xiàn)如下結(jié)果:
是的,報這個錯了。因為8這個主鍵是存在的,現(xiàn)在插入的數(shù)據(jù),主鍵還是8,就造成了主鍵重復的沖突,所以會報這個錯,同時數(shù)據(jù)也是插入不進去的。
找到報錯原因,并改正
如果我們把需要插入的數(shù)據(jù)主鍵改成9,則:
很顯然插入成功了。再重新打開表看一下:
ok,數(shù)據(jù)是插入成功的。
其他可能造成報錯的情況
還有一種情況會觸發(fā)這個報錯。就以上面的例子來說,在沒有id為9的這條數(shù)據(jù)時,我插入這條數(shù)據(jù),沒有問題,不會報錯,也能插入成功。但如果再運行剛剛那句話,就不行了。因為9已經(jīng)插入了,再運行一遍,就等于再插入主鍵為9的這條數(shù)據(jù),這就又會造成主鍵沖突。
還有一種情況也會觸發(fā)這個報錯,就是沒有設(shè)置主鍵遞增
要么用可視化工具Navicat Premium 16勾選自動遞增。
要么在命令行里設(shè)置主鍵遞增。
總結(jié)解決方案
綜上所述,這個錯誤提示是因為在插入數(shù)據(jù)時,插入了一個已經(jīng)存在的主鍵值,導致沖突。解決方案如下:
- 確認是否插入了重復的數(shù)據(jù),可以通過查詢數(shù)據(jù)庫來查看是否有重復的主鍵值。
- 如果是插入重復數(shù)據(jù)導致的錯誤,可以通過修改數(shù)據(jù)或者刪除重復數(shù)據(jù)來解決。
- 如果是其他原因?qū)е碌腻e誤,可以嘗試重新創(chuàng)建表格或者修改表格結(jié)構(gòu)來解決。
以上就是MySql報錯:Duplicate entry ‘10‘ for key ‘PRIMARY‘的解決方案的詳細內(nèi)容,更多關(guān)于Duplicate entry ‘10‘ for key ‘PRIMARY‘的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MySQL復制表結(jié)構(gòu)和內(nèi)容到另一張表中的SQL語句
這篇文章主要介紹了MySQL復制表結(jié)構(gòu)和內(nèi)容到另一張表中的SQL語句,需要的朋友可以參考下2014-07-07Mysql導入導出工具Mysqldump和Source命令用法詳解
Mysql本身提供了命令行導出工具Mysqldump和Mysql Source導入命令進行SQL數(shù)據(jù)導入導出工作,通過Mysql命令行導出工具Mysqldump命令能夠?qū)ysql數(shù)據(jù)導出為文本格式(txt)的SQL文件,通過Mysql Source命令能夠?qū)QL文件導入Mysql數(shù)據(jù)庫中,下面通過Mysql導入導出SQL實例詳解Mysqldump和Source命令的用法2012-09-09MySQL數(shù)據(jù)庫遷移到Oracle數(shù)據(jù)庫的完整步驟記錄
在研發(fā)過程中可能會用到將表數(shù)據(jù)庫中的表結(jié)構(gòu)及數(shù)據(jù)遷移到另外一種數(shù)據(jù)庫中,比如說從mysql中遷移到oracle中,這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫遷移到Oracle數(shù)據(jù)庫的完整步驟,需要的朋友可以參考下2024-06-06MySQL函數(shù)date_format()日期格式轉(zhuǎn)換的實現(xiàn)
本文主要介紹了MySQL函數(shù)date_format()日期格式轉(zhuǎn)換的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-08-08