织梦数据库sql批量替换语句

SQL 是织梦运维最高效的批量处理手段,但稍有不慎也会造成不可逆的数据破坏。本文整理织梦数据库 sql 批量替换语句的常用写法,涵盖正文、标题、关键词、栏目、附件路径等场景,并给出安全执行规范,让批量操作既快又稳。

一、织梦核心数据表结构

批量替换前必须知道数据存在哪。织梦文章相关核心表:

  • dede_archives:文档主表,存标题、关键词、描述、栏目、发布时间
  • dede_addonarticle:文章附加表,存正文 body
  • dede_addonimages:图集附加表,存图片集 imgurls
  • dede_arctype:栏目表,存栏目名、栏目描述
  • dede_uploads:附件表,存图片 URL

二、正文内容替换

最常见场景:替换文章正文中的链接、电话、品牌词。

UPDATE dede_addonarticle
SET body=REPLACE(body, '旧链接', '新链接')
WHERE body LIKE '%旧链接%';

统计受影响行数(执行前先 SELECT 确认):

SELECT COUNT(*) FROM dede_addonarticle WHERE body LIKE '%旧链接%';

三、标题与关键词替换

UPDATE dede_archives
SET title=REPLACE(title, '旧品牌', '新品牌')
WHERE title LIKE '%旧品牌%';

UPDATE dede_archives
SET keywords=REPLACE(keywords, '旧词', '新词')
WHERE keywords LIKE '%旧词%';

UPDATE dede_archives
SET description=REPLACE(description, '旧电话', '新电话')
WHERE description LIKE '%旧电话%';

这三张字段是搜索引擎抓取的重点,替换后务必重新生成 HTML。

四、附件路径替换

迁移服务器、切换 CDN 域名时常需批量改附件路径:

UPDATE dede_uploads
SET url=REPLACE(url, '/uploads/', 'https://cdn.example.com/uploads/')
WHERE url LIKE '/uploads/%';

UPDATE dede_addonarticle
SET body=REPLACE(body, 'src="/uploads/', 'src="https://cdn.example.com/uploads/')
WHERE body LIKE '%src="/uploads/%';

图集专用替换:

UPDATE dede_addonimages
SET imgurls=REPLACE(imgurls, 'old.example.com', 'new.example.com')
WHERE imgurls LIKE '%old.example.com%';

五、按栏目限定替换

避免全站误改,可 JOIN dede_archives 限定 typeid:

UPDATE dede_addonarticle a
JOIN dede_archives b ON a.aid=b.id
SET a.body=REPLACE(a.body, 'A产品', 'B产品')
WHERE b.typeid IN (5,6,7)
  AND a.body LIKE '%A产品%';

六、安全执行规范

执行前 mysqldump 备份整库,命令:mysqldump -u用户 -p 数据库名 > backup_$(date +%Y%m%d).sql
大表替换分批执行,用 LIMIT 5000 配合循环,避免单条事务锁表过久。
REPLACE 函数区分大小写,不区分大小写需用 CONVERT(body USING utf8mb4) COLLATE utf8mb4_general_ci
替换后立即重新生成 HTML 与 sitemap,并刷新 CDN 缓存。
生产环境避免直接 UPDATE,建议先在从库或测试库验证 SQL 结果。

七、后续优化方向

掌握织梦数据库sql批量替换语句后,建议把常用替换语句整理成脚本库,按场景命名(如 change_phone.sql、change_cdn.sql),运维时直接调用,避免每次重写。对于内容资产价值高的站点,可建立"内容变更日志"表,记录每次替换的时间、范围、影响行数,便于审计与回溯。把 SQL 批量替换从一次性应急操作升级为可追溯的内容治理流程,让数据维护有据可查、风险可控。