帝国CMS后台添加信息报错Duplicate entry xx for key PRIMARY

wdzsjl 2周前 (10-10) 阅读数 7 #WordPress

当在帝国CMS后台添加信息时遇到 Duplicate entry 'xx' for key 'PRIMARY' 的错误时,通常是因为主键冲突。以下是一些解决该问题的方法:

方法 1:后台修复数据库

  1. 进入后台

    • 登录帝国CMS后台。
    • 进入 系统 -> 备份与恢复数据 -> 备份数据
  2. 修复数据表

    • 在页面底部,找到 修复数据表和优化数据表 的选项。
    • 点击 修复数据表

方法 2:插入一个大于当前索引的信息

如果后台修复没有解决问题,可以通过手动或 SQL 插入一个大于当前索引的信息,使索引 ID 重新递增。

  1. 手动操作

    • 直接在数据库中插入一条新的记录,ID 填一个大于当前最大 ID 的值。
  2. SQL 插入

    sql
     
    INSERT 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 语句重新生成索引。

  1. 创建临时表

    sql
     
    CREATE TABLE [!db.pre!]ecms_newstemp AS (SELECT id, classid, newstime, truetime, lastdotime, havehtml FROM [!db.pre!]ecms_news);
  2. 添加 checked 列

    sql
     
    ALTER TABLE `[!db.pre!]ecms_newstemp` ADD COLUMN `checked` tinyint(1) NOT NULL DEFAULT 0 AFTER `classid`;
  3. 添加主键

    sql
     
    ALTER TABLE `[!db.pre!]ecms_newstemp` ADD PRIMARY KEY (`id`);
  4. 重命名旧表

    sql
     
    ALTER TABLE [!db.pre!]ecms_news_index RENAME TO [!db.pre!]ecms_news_indexbak;
  5. 重命名临时表

    sql
     
    ALTER TABLE [!db.pre!]ecms_newstemp RENAME TO [!db.pre!]ecms_news_index;
  6. 设置自增主键

    sql
     
    ALTER TABLE `[!db.pre!]ecms_news_index` CHANGE `id` `id` INT(10) NOT NULL AUTO_INCREMENT;
  7. 添加索引

    sql
     
    ALTER 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);
  8. 更新 checked 字段

    sql
     
    UPDATE [!db.pre!]ecms_news_index SET checked = 1;

总结

  1. 后台修复数据库:适用于轻微的数据问题。
  2. 插入一个大于当前索引的信息:适用于简单的索引冲突。
  3. 批量重新生成索引:适用于复杂的数据问题,需要谨慎操作。

通过以上方法,可以解决 Duplicate entry 'xx' for key 'PRIMARY' 的问题。

wx.jpg ywfw.jpg
热门