DedeCMS是一款基于PHP和MySQL的开源网站管理系统,因此很多复杂或批量化的操作都可以直接通过执行SQL语句在数据库层面完成,这比在后台一个一个操作要高效得多。

⚠️ 重要警告: 在执行任何SQL语句之前,请务必备份数据库! 一个错误的SQL语句可能会导致数据丢失或网站瘫痪,您可以通过phpMyAdmin等数据库管理工具轻松导出数据库备份。
准备工作:如何执行SQL语句?
在DedeCMS中,您可以通过以下两种主要方式执行SQL语句:
-
后台直接执行(推荐)
- 登录您的DedeCMS后台。
- 进入 “系统” -> “SQL命令行工具”。
- 在文本框中粘贴您的SQL语句。
- 点击“查询”或“执行”按钮。
- 优点:操作简单,有基本的错误提示。
- 缺点:对于非常复杂的、多行的语句(如包含
DELIMITER的存储过程),可能无法执行。
-
通过phpMyAdmin执行(更强大、更安全)
(图片来源网络,侵删)- 登录您的虚拟主机控制面板(如cPanel)或服务器管理面板。
- 找到并进入 phpMyAdmin 数据库管理工具。
- 选择您的DedeCMS数据库名称。
- 点击顶部的 “SQL” 选项卡。
- 在文本框中粘贴您的SQL语句。
- 点击“执行”按钮。
- 优点:功能最全,支持所有MySQL语法,是数据库管理的标准工具。
- 缺点:需要额外登录phpMyAdmin。
常用DedeCMS SQL语句分类
以下SQL语句涵盖了从内容管理、用户管理到系统优化的各个方面。
内容管理(#@__archives 表)
#@__ 是DedeCMS表前缀的占位符,实际使用时请替换为您自己的表前缀,如 dede_。
1 批量修改栏目ID(移动文章)
将 旧栏目ID 下的所有文章移动到 新栏目ID 下。
UPDATE `#@__archives` SET typeid = '新栏目ID' WHERE typeid = '旧栏目ID';
2 批量修改文章状态(如:从“仅动态”改为“生成HTML”)
将 旧模型ID 的所有文章模型更改为 新模型ID。

UPDATE `#@__archives` SET arcid = 新模型ID WHERE arcid = 旧模型ID;
注意:arcid 字段通常存储的是文章ID,这个操作可能不常见,更常见的是修改 ismake 字段来控制是否生成HTML。
3 批量修改文章属性(如:将普通文章改为“推荐”)
将 栏目ID 下的所有文章标记为“推荐”(flag='c')。
UPDATE `#@__archives` SET flag = 'c' WHERE typeid = '栏目ID';
flag字段可以组合使用,如'c'推荐,'h'头条,'p'图片,要同时设置多个,可以用'ch'。*
4 批量替换文章内容中的文字或链接
这是一个非常实用的功能,比如更换网站域名后,需要批量替换文章中的旧链接。
UPDATE `#@__addonarticle` SET body = REPLACE(body, '旧域名.com', '新域名.com');
#@__addonarticle是文章内容表,如果是其他模型(如图集、软件),请使用对应的表,如#@__addonimages、#@__addonsoft。*body是字段名,存储文章正文。*
5 删除指定栏目下的所有文章(危险操作!)
此操作不可逆,请务必先备份数据库!
DELETE FROM `#@__archives` WHERE typeid = '要删除的栏目ID';
- 这只会删除文章数据,不会删除栏目本身,删除后,可能还需要清理相关表的数据,如
#@__arctiny、#@__addonarticle等。*
栏目管理(#@__arctype 表)
1 批量修改栏目模板
将所有顶级栏目(topid=0)的栏目模板修改为 new_list.htm。
UPDATE `#@__arctype` SET tempindex = 'new_list.htm' WHERE topid = 0;
2 批量设置栏目为“最终栏目”
将指定ID的栏目及其所有下级栏目都设置为“最终栏目”(ispart=0)。
-- 这个比较复杂,通常需要用到递归查询,MySQL 8.0+支持WITH语法,旧版本可能需要存储过程。 -- 这里提供一个简单的示例,只修改直接下级栏目: UPDATE `#@__arctype` SET ispart = 0 WHERE topid = '父栏目ID';
会员/用户管理(#@__member 和 #@__member_tpl 表)
1 批量重置会员密码
将用户名为 testuser 的会员密码重置为 123456。
-- 密码在DedeCMS中是经过md5加密的。'21232f297a57a5a743894a0e4a801fc3' 是 '123456' 的md5值。 UPDATE `#@__member` SET pwd = '21232f297a57a5a743894a0e4a801fc3' WHERE uname = 'testuser';
2 批量修改会员模型
将所有普通会员(mtype=个人) 的会员模型修改为 企业。
UPDATE `#@__member` SET mtype = '企业' WHERE mtype = '个人';
系统与数据维护
1 修复 #@__arctiny 和 #@__archives 数据不一致
#@__arctiny 是文章摘要表,用于首页列表的调用,如果数据不一致,会导致首页列表显示异常,以下SQL可以将 #@__archives 的数据同步到 #@__arctiny。
-- 清空旧数据 TRUNCATE TABLE `#@__arctiny`; -- 从archives表重新插入数据 INSERT INTO `#@__arctiny` (id, typeid, typeid2, arcrank, click, money, title, litpic, pubdate, senddate, mid, notpost) SELECT id, typeid, 0, arcrank, click, money, title, litpic, pubdate, senddate, mid, notpost FROM `#@__archives`;
2 清理孤立的文档(无对应栏目的文章)
有时删除栏目后,文章数据还留在 #@__archives 表里,会造成数据冗余。
-- 删除archives表中typeid在arctype表中不存在的记录 DELETE FROM `#@__archives` WHERE typeid NOT IN (SELECT id FROM `#@__arctype`);
3 批量更新文章的点击量
如果点击量统计出现问题,可以手动清零或设置一个初始值。
-- 将所有文章的点击量清零 UPDATE `#@__archives` SET click = 0; -- 将所有文章的点击量设置为100 UPDATE `#@__archives` SET click = 100;
进阶与技巧
使用 JOIN 进行跨表查询和修改
我们想找出所有“未审核”(arcrank=-1)的文章,并显示它们的栏目名称。
SELECT a.id, a.title, t.typename FROM `#@__archives` AS a LEFT JOIN `#@__arctype` AS t ON a.typeid = t.id WHERE a.arcrank = -1;
结合PHP进行批量操作
如果操作非常复杂,或者需要根据动态条件来执行,可以写一个临时的PHP脚本来执行SQL,创建一个 sql.php 文件:
<?php
// 引入DedeCMS配置文件,获取数据库连接信息
// 需要根据您的网站路径修改
require_once (dirname(__FILE__) . "/include/config_global.php");
// 连接数据库
$link = mysql_connect($cfg_dbhost, $cfg_dbuser, $cfg_dbpwd);
mysql_select_db($cfg_dbname, $link);
mysql_query("SET NAMES 'utf8'");
// 要执行的SQL语句
$sql = "UPDATE `#@__archives` SET click = click + 1 WHERE typeid = '1'";
// 执行SQL
if (mysql_query($sql)) {
echo "SQL执行成功!";
} else {
echo "SQL执行失败: " . mysql_error();
}
// 关闭连接
mysql_close($link);
?>
然后通过浏览器访问 http://您的域名/sql.php 即可执行。执行完毕后务必删除此文件!
常用数据表说明
表名 (默认前缀 dede_) |
说明 |
|---|---|
dede_archives |
文章主表,存储文章的基本信息(标题、ID、所属栏目ID、点击量等)。 |
ded_arctiny |
文章摘要表,用于首页和列表页的快速调用,数据量小,查询快。 |
dede_addonarticle |
表,存储文章的正文内容(body字段)。 |
dede_arctype |
栏目表,存储所有栏目的信息。 |
dede_member |
会员表,存储会员的基本信息。 |
dede_admin |
管理员表,存储后台管理员账号信息。 |
dede_taglist |
标签表,存储文章标签。 |
希望这份详细的指南能帮助您更好地管理和维护您的DedeCMS网站!再次强调,操作前请务必备份!
