首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL #1062 Duplicate entry for key PRIMARY 錯誤兩大場景解決全攻略

     編輯:MySQL 資料庫相關知識

場景一:資料遷移導入時主鍵衝突

典型現象

#1062 – Duplicate entry '1' for key 'PRIMARY'

原因

使用 phpMyAdmin 分批導入大量 SQL 時,第一批因超過限制中斷,但部分資料已寫入。後續批次重新導入時,自增主鍵從 1 開始,與已存在資料衝突。

解決方案

  1. 清空目標表:TRUNCATE TABLE target_table;(保留結構、重置自增計數器)
  2. 或刪除現有資料:DELETE FROM target_table; + ALTER TABLE target_table AUTO_INCREMENT = 1;
  3. 重新完整導入資料。

場景二:備份還原後業務寫入報錯

錯誤範例

Discuz! info: MySQL Query Error
SQL: INSERT INTO cdb_posts ... VALUES ('45', '2727', ...)
Error: Duplicate entry '2678' for key 1
Errno.: 1062

可能原因

  • 備份過程中有新資料寫入,導致備份檔案的自增值落後於實際最大值。
  • 表檔案損壞(MyISAM 引擎常見),導致自增計數器異常。

嘗試無效的方案

  • ALTER TABLE cdb_posts CHANGE pid pid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT — 重置定義無效
  • REPAIR TABLE cdb_posts — 標準修復無效

終極解決:myisamchk 離線深度修復

# 停止 MySQL 服務
systemctl stop mysqld

# 進入資料目錄
cd /var/lib/mysql/your_database

# 執行修復(-r 為恢復模式)
myisamchk -r cdb_posts.MYI

# 啟動服務驗證
systemctl start mysqld

預防最佳實踐

  • 遷移大表:使用 mysqldump --single-transaction --master-data=2 獲得一致性快照,避免分批導入。
  • 生產環境優先使用 InnoDB,支援崩潰恢復與線上熱備(xtrabackup)。
  • 定期檢查 SHOW TABLE STATUS 中的 Auto_increment 值與 MAX(id) 差距。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved