dedecms dede sql语句如何正确使用?

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 DEDE建站 正文

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

dedecms dede sql语句
(图片来源网络,侵删)

⚠️ 重要警告: 在执行任何SQL语句之前,请务必备份数据库! 一个错误的SQL语句可能会导致数据丢失或网站瘫痪,您可以通过phpMyAdmin等数据库管理工具轻松导出数据库备份。


准备工作:如何执行SQL语句?

在DedeCMS中,您可以通过以下两种主要方式执行SQL语句:

  1. 后台直接执行(推荐)

    • 登录您的DedeCMS后台。
    • 进入 “系统” -> “SQL命令行工具”
    • 在文本框中粘贴您的SQL语句。
    • 点击“查询”或“执行”按钮。
    • 优点:操作简单,有基本的错误提示。
    • 缺点:对于非常复杂的、多行的语句(如包含DELIMITER的存储过程),可能无法执行。
  2. 通过phpMyAdmin执行(更强大、更安全)

    dedecms dede sql语句
    (图片来源网络,侵删)
    • 登录您的虚拟主机控制面板(如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

dedecms dede sql语句
(图片来源网络,侵删)
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网站!再次强调,操作前请务必备份!

-- 展开阅读全文 --
头像
如何去掉dede pagelist默认的li标签?
« 上一篇 2025-12-12
dede织梦服装商城模板哪里下载?
下一篇 » 2025-12-12

相关文章

取消
微信二维码
支付宝二维码

目录[+]