我强烈建议你不要直接手动修改数据库,而是采用更安全、更可靠的方法,以下是几种不同场景下的解决方案,请根据你的实际情况选择。

(图片来源网络,侵删)
⚠️ 重要前提:备份!备份!备份!
在进行任何涉及数据库修改的操作之前,请务必备份你的整个网站,包括:
- 网站程序文件
- 完整数据库
这样即使操作失败,你也可以轻松恢复。
修改单篇文章或少量文章的 ID(最推荐的方法)
这个方法的核心是利用 DedeCMS 的“复制文章”功能,它会自动生成一个新的 ID,然后你删除旧文章即可,这是最安全、最不容易出错的方法。
操作步骤:

(图片来源网络,侵删)
-
登录后台:进入你的 DedeCMS 后台管理界面。
-
找到文章:在“核心” -> “内容发布” -> “普通文章” 或 “所有文档” 中,找到你想要修改 ID 的那篇文章。
-
复制文章:
- 勾选你要修改的文章。
- 点击顶部或底部的“复制”按钮。
-
设置新文章:
(图片来源网络,侵删)- 在弹出的页面中,你可以选择“保持原栏目”或移动到其他栏目。
- 你可以修改标题,以防重复。
- 保持默认即可。
- 点击“确定”。
-
获取新 ID:
- 复制成功后,系统会提示你操作成功,并通常会让你跳转到新文章的编辑页面。
- 记下这个新文章的 ID,你也可以在“所有文档”列表中找到它。
-
删除旧文章:
- 回到“所有文档”列表,找到并勾选原来的那篇旧文章。
- 点击“删除”按钮。
-
完成:
你的文章内容已经成功转移到了一个新的 ID 上,网站上的链接和图片路径等都会自动更新为新 ID 的,不会出现错误。
需要精确修改 ID(想让某篇文章的 ID 变为 10000)
如果你确实需要将某篇文章的 ID 修改为一个特定的、未被使用的数字,那么就必须操作数据库。请务必小心!
操作步骤:
-
准备工作:
- 确定新 ID:先确认你想要设置的新 ID (
10000) 在dede_archives表中是不存在的,否则会造成冲突。 - 记录旧 ID:记下你要修改的文章的当前 ID (
123)。
- 确定新 ID:先确认你想要设置的新 ID (
-
修改主表
dede_archives:- 进入你的网站数据库管理工具(如 phpMyAdmin)。
- 找到
dede_archives表(这是文章的主表)。 - 执行以下 SQL 语句,将旧 ID
123改为新 ID10000:UPDATE dede_archives SET id = 10000 WHERE id = 123;
- 执行后,检查
dede_archives表,确认id=123的记录已经变成了id=10000。
-
修改附加表
dede_addonarticle:- 文章的详细内容(如 body 字段)存储在附加表中,通常是
dede_addonarticle。 - 你必须同步修改这个表中的
aid字段,因为它与主表的id是关联的。 - 执行以下 SQL 语句:
UPDATE dede_addonarticle SET aid = 10000 WHERE aid = 123;
- 文章的详细内容(如 body 字段)存储在附加表中,通常是
-
(极重要!)检查并修复关联数据:
- 修改
id和aid后,很多其他表中的关联数据会失效,导致文章打不开、评论丢失等,你需要手动修复这些关联。 dede_arctiny表(用于列表页,性能优化表):UPDATE dede_arctiny SET id = 10000, aid = 10000 WHERE id = 123;
dede_feedback表(评论表):UPDATE dede_feedback SET aid = 10000 WHERE aid = 123;
dede_taglist表(标签表):UPDATE dede_taglist SET aid = 10000 WHERE aid = 123;
dede_arctag表(文章标签关联表):UPDATE dede_arctag SET aid = 10000 WHERE aid = 123;
dede_member_stow表(用户收藏表):UPDATE dede_member_stow SET aid = 10000 WHERE aid = 123;
dede_search_index表(搜索索引表):UPDATE dede_search_index SET id = 10000, aid = 10000 WHERE aid = 123;
- 修改
-
检查静态文件:
- 如果你的网站开启了“使用HTML静态页”,那么旧 ID 对应的静态文件(如
/html/123/123.html)仍然存在。 - 你需要删除旧的静态文件,或者等待下次生成时被覆盖。
- 可以进入后台的“生成” -> “HTML更新” -> “指定文档更新”,输入新 ID
10000来重新生成它的静态页面。
- 如果你的网站开启了“使用HTML静态页”,那么旧 ID 对应的静态文件(如
批量修改文章 ID(清空 ID 从 1 开始)
这种操作通常是为了清理数据库碎片,或者在做数据迁移时,这是一个高风险操作,建议只在测试环境充分验证后再在生产环境执行。
操作步骤:
-
清空自增 ID:
- 在 phpMyAdmin 中,对
dede_archives表执行以下 SQL,将其自增 ID 重置为 1(前提是表已清空或你想重新开始):ALTER TABLE dede_archives AUTO_INCREMENT = 1;
- 对
dede_addonarticle等其他相关附加表也执行类似操作。
- 在 phpMyAdmin 中,对
-
使用脚本批量重建:
- 手动批量修改 ID 几乎是不可能的,因为 ID 之间有关联。
- 一个相对安全的方法是:清空所有文章数据表(
dede_archives,dede_addonarticle,dede_arctiny等),然后通过 DedeCMS 后台的“内容导入”功能,将你整理好的文章数据重新导入一遍,导入时,DedeCMS 会自动从 1 开始分配新的、连续的 ID。
总结与建议
| 场景 | 推荐方法 | 优点 | 缺点 |
|---|---|---|---|
| 修改单篇/少量文章 | 复制文章法 | 绝对安全,系统自动处理所有关联,无副作用。 | 步骤稍多,需要手动删除旧文章。 |
| 精确修改指定 ID | 数据库修改法 | 可以精确控制 ID 数字。 | 风险极高,容易遗漏关联表,导致网站功能异常。 |
| 批量重置 ID | 清空+导入法 | 从根本上解决 ID 不连续问题。 | 风险高,会丢失所有现有文章数据,需要提前备份好文章内容。 |
对于 99% 请使用【场景一:复制文章法】,这是官方设计思路所支持的最安全、最可靠的方式,只有在非常特殊且清楚所有风险的情况下,才考虑使用数据库操作方法。
