96SEO 2025-09-28 10:18 7
DedeCms作为国内广泛使用的开源内容管理系统,在网站建设和内容管理方面拥有较高的灵活性和
性。但在实际应用过程中, 许多用户反映,在后台发布文章或编辑文章时经常遇到“把数据保存到数据库附加表 dede_addonarticle 时出错”的问题,错误信息通常为:
Duplicate entry 'xxx' for key 'PRIMARY'
这类错误不仅影响正常发布流程,还可能导致数据丢失或页面异常。本文将该问题产生的根本原因,并结合最新版本DedeCms提供权威、具体且可操作的解决方案。

理解问题本质,是解决技术难题的第一步。该报错提示“Duplicate entry 'xxx' for key 'PRIMARY'”意为尝试插入数据库时 主键字段出现了重复值,导致插入失败。
DedeCms中, dede_addonarticle 表是用来存储文章
字段数据的附加表,和主表 dede_archives 通过主键ID进行关联。正常情况下每篇文章在两个表中的ID应保持一致且唯一。
主键冲突主要来自以下几种情况:
DedeCms设计中并非所有附加表都自动支持自增长主键。dede_addonarticle 的主键往往是继承自关联文章编号, 如果某些操作导致这个编号被提前占用或者重新使用,就会引发主键冲突。
用户A反馈,在DedeCms后台点击“发布文章”时系统报错:
Error: Duplicate entry '2532' for key 'PRIMARY'
一边无法成功保存文章内容,需要反复删除草稿才能继续操作。
Duplicate entry '2532' for key 'PRIMARY'
File: /dede/include/archives.class.php
Line: 1024
SQL: INSERT INTO dede_addonarticle VALUES
DedeCms官方针对该问题提供两种核心思路:
*注意*: 此方法适合临时绕过问题, 但可能对数据完整性有一定影响,请谨慎使用并做好备份!
ALTER TABLE dede_addonarticle DROP PRIMARY KEY;
DedeCms默认架构里 并非所有附加表都配置了自增属性,这可能是重复插入失败的重要原因。所以呢,将dede_addonarticle.id 字段调整为 AUTO_INCREMENT 类型能有效规避此类冲突:
SHOW COLUMNS FROM dede_addonarticle LIKE 'id';
-- 或
DESCRIBE dede_addonarticle;
根据后来啊判断是否已配置AUTO_INCREMENT。
若无,则继续下一步修改。
ALTER TABLE dede_addonarticle MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;
此处务必保证 id 字段为NOT NULL。
若需要,可以先删除原有PRIMARY KEY,再重新创建正确索引。
如需删除旧索引:
ALTER TABLE dede_addonarticle DROP PRIMARY KEY;
再添加新的主键:
ALTER TABLE dede_addonarticle ADD PRIMARY KEY ;
这样就实现了自动递增且唯一约束。
Demand feedback