當在帝國CMS後臺新增資訊時遇到 Duplicate entry 'xx' for key 'PRIMARY'
的錯誤時,通常是因為主鍵衝突。以下是一些解決該問題的方法:
方法 1:後臺修復資料庫
-
進入後臺:
- 登入帝國CMS後臺。
- 進入 系統 -> 備份與恢復資料 -> 備份資料。
-
修復資料表:
- 在頁面底部,找到 修復資料表和最佳化資料表 的選項。
- 點選 修復資料表。
方法 2:插入一個大於當前索引的資訊
如果後臺修復沒有解決問題,可以透過手動或 SQL 插入一個大於當前索引的資訊,使索引 ID 重新遞增。
-
手動操作:
- 直接在資料庫中插入一條新的記錄,ID 填一個大於當前最大 ID 的值。
-
SQL 插入:
sqlINSERT INTO `phome_ecms_news` VALUES (3262, 1, 1, '', '', '', 1, 'admin', '', 1, 0, 1333244472, 0, 1, 0, 0, ',b|', '', '1', 0, 0, 0, 0, 0, 0, '帝國cms模板', 1333244427, '', 0, 1, 1350716513, 0, 0, 0, 0, '', '帝國cms模板網', 0, '1', '', 0, '', 0);
- 第一個欄位
3262
是索引 ID,後面的欄位根據實際情況調整。
- 第一個欄位
方法 3:批次重新生成索引
如果以上方法仍然無效,可以嘗試使用 SQL 語句重新生成索引。
-
建立臨時表:
sqlCREATE TABLE [!db.pre!]ecms_newstemp AS (SELECT id, classid, newstime, truetime, lastdotime, havehtml FROM [!db.pre!]ecms_news);
-
新增
checked
列:sqlALTER TABLE `[!db.pre!]ecms_newstemp` ADD COLUMN `checked` tinyint(1) NOT NULL DEFAULT 0 AFTER `classid`;
-
新增主鍵:
sqlALTER TABLE `[!db.pre!]ecms_newstemp` ADD PRIMARY KEY (`id`);
-
重新命名舊錶:
sqlALTER TABLE [!db.pre!]ecms_news_index RENAME TO [!db.pre!]ecms_news_indexbak;
-
重新命名臨時表:
sqlALTER TABLE [!db.pre!]ecms_newstemp RENAME TO [!db.pre!]ecms_news_index;
-
設定自增主鍵:
sqlALTER TABLE `[!db.pre!]ecms_news_index` CHANGE `id` `id` INT(10) NOT NULL AUTO_INCREMENT;
-
新增索引:
sqlALTER TABLE `[!db.pre!]ecms_news_index` ADD INDEX (classid); ALTER TABLE `[!db.pre!]ecms_news_index` ADD INDEX (checked); ALTER TABLE `[!db.pre!]ecms_news_index` ADD INDEX (newstime); ALTER TABLE `[!db.pre!]ecms_news_index` ADD INDEX (truetime);
-
更新
checked
欄位:sqlUPDATE [!db.pre!]ecms_news_index SET checked = 1;
總結
- 後臺修復資料庫:適用於輕微的資料問題。
- 插入一個大於當前索引的資訊:適用於簡單的索引衝突。
- 批次重新生成索引:適用於複雜的資料問題,需要謹慎操作。
透過以上方法,可以解決 Duplicate entry 'xx' for key 'PRIMARY'
的問題。