下面我将从基础到高级,为你详细讲解如何编写和使用这些 SQL 语句。

基础语法
SQL 更新语句的基本语法结构如下:
UPDATE `表名` SET `字段名` = '新值' WHERE `条件字段` = '条件值';
UPDATE: 关键字,表示执行更新操作。表名: 你需要修改的数据所在的表,在 DedeCMS 中,常见的表有dede_archives(文章主表)、dede_arctype(栏目表)、dede_addonarticle(文章附加表,如果使用了模型) 等。SET: 关键字,后面跟着要修改的字段和新值。WHERE: 关键字,用于指定更新哪些记录。这个部分非常重要,如果省略,将会更新整个表的所有记录!条件字段和条件值: 用来定位到具体的一条或多条记录,可以用文章 ID (id)、文章标题 (title) 等作为条件。
在 DedeCMS 后台执行 SQL 语句
在编写好 SQL 语句后,你需要一个地方来执行它。
-
登录你的 DedeCMS 后台。
-
在顶部菜单栏找到 “系统” -> “SQL命令行工具”。
(图片来源网络,侵删) -
点击进入后,你会看到一个文本框。
-
将你写好的 SQL 语句粘贴到文本框中。
-
点击 “提交查询” 按钮即可执行。
⚠️ 重要提醒:

- 操作前务必备份数据库! 任何 SQL 操作都有风险,备份是防止数据丢失的唯一有效方法。
- 修改前,建议先在本地测试环境或备份数据库后操作。
- 对于大型网站,
WHERE条件一定要写准确,避免误操作。
常用修改场景示例
下面是一些在 DedeCMS 中非常常见的修改场景。
场景1:修改文章标题
假设你要把所有标题中包含 "旧标题" 的文章,修改为 "新标题"。
UPDATE `dede_archives` SET `title` = '新标题' WHERE `title` LIKE '%旧标题%';
LIKE '%旧标题%'是一个模糊匹配, 是通配符,表示任意字符,这句会找到所有标题里包含 "旧标题" 的记录。
场景2:修改文章状态(将文章设为“首页推荐”)
DedeCMS 文章的 ismake 字段用于控制是否生成静态页,而 flag 字段用于设置文章属性,如首页推荐、头条等。flag 是一个字段存储多个标志位的字段。
假设你要将 ID 为 10 的文章设为“首页推荐”(c)。
方法A:直接覆盖(会清除其他标志)
UPDATE `dede_archives` SET `flag` = 'c' WHERE `id` = 10;
⚠️ 注意: 这种方法会直接将 flag 字段的值设置为 c,如果这篇文章之前还有其他属性(如“头条”h),将会被清除。
方法B:追加推荐(保留其他标志)
这是更推荐的做法,你需要使用字符串拼接函数 CONCAT。
UPDATE `dede_archives` SET `flag` = CONCAT(`flag`, 'c') WHERE `id` = 10;
CONCAT(flag, 'c')会将原有的flag值和新的'c'连接起来。
方法C:取消推荐
如果你想去掉某个标志,可以使用 REPLACE 函数。
UPDATE `dede_archives` SET `flag` = REPLACE(`flag`, 'c', '') WHERE `id` = 10;
REPLACE会将flag字段中的所有'c'替换为空字符串 。
场景3:修改栏目名称
假设你要将 ID 为 5 的栏目名称从 "旧栏目名" 修改为 "新栏目名"。
UPDATE `dede_arctype` SET `typename` = '新栏目名' WHERE `id` = 5;
场景4:批量替换文章内容中的文本
这是一个非常实用的功能,你想把文章内容中所有的 "旧域名.com" 替换成 "新域名.com"。
UPDATE `dede_addonarticle` SET `body` = REPLACE(`body`, '旧域名.com', '新域名.com');
- 注意:这里的表名是
dede_addonarticle,这是文章内容默认所在的附加表,如果你的文章使用了自定义模型,表名可能是dede_addonXX(XX是模型ID)。 - 同样,
WHERE条件可以加上,比如只修改某个栏目下的文章:UPDATE `dede_addonarticle` a LEFT JOIN `dede_archives` ar ON a.aid = ar.id SET a.body = REPLACE(a.body, '旧域名.com', '新域名.com') WHERE ar.typeid = 5;
场景5:修改文章作者来源
假设你要把所有作者为 "张三" 的记录,修改为 "李四"。
UPDATE `dede_archives` SET `writer` = '李四' WHERE `writer` = '张三';
场景6:修改自定义字段值
假设你有一个自定义字段 myfield,现在需要把它所有值设为 "默认值"。
UPDATE `dede_addonarticle` SET `myfield` = '默认值';
- 同样,请确保你的附加表名是正确的。
高级技巧
同时修改多个字段
使用逗号 隔开要修改的字段。
UPDATE `dede_archives` SET `title` = '新标题', `writer` = '新作者' WHERE `id` = 10;
基于其他表的条件更新
有时你需要根据一个表的条件去更新另一个表,将 "技术分享" 栏目下的所有文章的 flag 字段都加上 h (头条) 标志。
UPDATE `dede_archives` SET `flag` = CONCAT(`flag`, 'h') WHERE `typeid` = (SELECT `id` FROM `dede_arctype` WHERE `typename` = '技术分享');
- 这个子查询
(SELECT ...)先找到 "技术分享" 栏目的id,然后外层UPDATE语句使用这个id作为条件。
修改字段值的一部分(使用 REPLACE)
REPLACE 函数也可以用来修改标题等。
UPDATE `dede_archives` SET `title` = REPLACE(`title`, '2025', '2025') WHERE `title` LIKE '%2025%';
- 这会将所有标题中包含 "2025" 的文章,把 "2025" 替换成 "2025"。
希望这份详细的指南能帮助你在 DedeCMS 中高效地修改数据!请务必谨慎操作。
