织梦的“删除到回收站”功能,并不是真正从数据库中删除记录,而是将文章状态标记为“待审核”或“删除”,并将其从主表移动到回收站数据表。

下面我将为你提供详细的步骤和SQL语句。
核心逻辑
- 主表
dede_archives:存放文章的基本信息(标题、ID、发布时间等),删除到回收站时,会将此表中的记录删除。 - 副表
dede_arctiny:存放文章的简略信息,删除到此表。 - 回收站表
dede_recyclebin:存放被删除的文章信息,删除到此表。 - 模型附加表:如果你的文章使用了自定义模型(如产品、图集等),还会有对应的附加表(如
dede_addonarticle),这些表中的记录也需要被移动或删除。
一个完整的“删除到回收站”操作,需要执行以下几个SQL步骤:
详细操作步骤
重要提示: 在执行任何SQL操作之前,务必备份数据库!以防误操作导致数据丢失,你可以通过phpMyAdmin等工具导出整个数据库。
第1步:将文章从主表 dede_archives 移动到回收站表 dede_recyclebin
这是最关键的一步,织梦自带了一个存储过程 sp_movearc recyclebin,就是用来干这个的,我们可以直接调用它,这比手动写SQL更安全、更完整。

SQL语句:
CALL sp_movearc_recyclebin(文章ID);
如何使用:
- 将上面的
文章ID替换为你想删除的文章的实际ID。 - 如果要删除多篇文章,可以连续执行多次,或者使用循环(如果你的客户端支持)。
示例:删除ID为 10 的文章到回收站
CALL sp_movearc_recyclebin(10);
示例:删除ID为 10, 25, 38 的三篇文章到回收站

CALL sp_movearc_recyclebin(10); CALL sp_movearc_recyclebin(25); CALL sp_movearc_recyclebin(38);
第2步:删除副表 dede_arctiny 中的记录
当主表记录被移走后,副表中对应的记录也应该被删除,以保持数据一致性。
SQL语句:
DELETE FROM dede_arctiny WHERE id = 文章ID;
示例:删除ID为 10 的文章在副表中的记录
DELETE FROM dede_arctiny WHERE id = 10;
同样,对多篇文章需要执行多次。
第3步:处理模型附加表(如果文章有)
如果你的文章使用了自定义模型(普通文章模型可能没有,但产品、软件下载等模型有),你还需要删除或移动附加表中的数据。
假设你的文章ID是 10,并且它属于一个附加表(dede_addonarticle,这是文章常用的附加表)。
SQL语句:
DELETE FROM dede_addonarticle WHERE aid = 文章ID;
示例:删除ID为 10 的文章在附加表 dede_addonarticle 中的记录
DELETE FROM dede_addonarticle WHERE aid = 10;
注意: dede_addonarticle 中的关联字段是 aid,而不是 id,其他自定义模型的附加表,其关联字段可能也是 aid,请务必确认。
批量删除到回收站的SQL脚本
如果你需要一次性删除大量文章,可以组合使用 IN 语句。
假设你要删除ID为 1, 2, 3, 4, 5 的所有文章到回收站。
使用存储过程(推荐)
虽然 CALL 语句通常一次只能处理一个ID,但你可以通过脚本循环调用,在phpMyAdmin中,你可以使用如下多行语句(注意分号):
-- 1. 移动到回收站表 CALL sp_movearc_recyclebin(1); CALL sp_movearc_recyclebin(2); CALL sp_movearc_recyclebin(3); CALL sp_movearc_recyclebin(4); CALL sp_movearc_recyclebin(5); -- 2. 从副表删除 DELETE FROM dede_arctiny WHERE id IN (1, 2, 3, 4, 5); -- 3. 从附加表删除 (假设是文章模型) DELETE FROM dede_addonarticle WHERE aid IN (1, 2, 3, 4, 5);
手动执行(不推荐,除非你完全理解织梦结构)
如果你不调用存储过程,就需要手动完成所有步骤,这很繁琐且容易出错:
-- 1. 先将数据插入到回收站表 (需要手动构建数据) -- 这一步非常复杂,需要从多个表中查询数据并插入,极易出错,强烈不推荐。 -- 强烈建议使用方法一的存储过程。 -- 2. 然后从各个表中删除 DELETE FROM dede_archives WHERE id IN (1, 2, 3, 4, 5); DELETE FROM dede_arctiny WHERE id IN (1, 2, 3, 4, 5); DELETE FROM dede_addonarticle WHERE aid IN (1, 2, 3, 4, 5);
总结与最佳实践
- 首选方案:使用
CALL sp_movearc_recyclebin(文章ID);,这是织梦官方提供的标准方法,能确保所有相关数据(包括栏目缓存、评论等,如果存储过程里包含的话)都得到正确处理。 - 操作顺序:先调用存储过程移动数据,然后再执行
DELETE语句清理副表和附加表。 - 备份数据库:这是铁律,永远不要跳过这一步。
- 精确ID:确保你的文章ID是准确的,错误的ID会导致误删。
- 确认模型:在操作附加表前,确认你的文章使用了哪个模型,以及对应的附加表名称和关联字段。
通过以上SQL语句,你就可以安全、高效地将织梦CMS中的文章删除到回收站了。
