SQL 是织梦运维最高效的批量处理手段,但稍有不慎也会造成不可逆的数据破坏。本文整理织梦数据库 sql 批量替换语句的常用写法,涵盖正文、标题、关键词、栏目、附件路径等场景,并给出安全执行规范,让批量操作既快又稳。
一、织梦核心数据表结构
批量替换前必须知道数据存在哪。织梦文章相关核心表:
dede_archives:文档主表,存标题、关键词、描述、栏目、发布时间dede_addonarticle:文章附加表,存正文 bodydede_addonimages:图集附加表,存图片集 imgurlsdede_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 批量替换从一次性应急操作升级为可追溯的内容治理流程,让数据维护有据可查、风险可控。