Files
YschcmsService/sql/upgrade_w4_site_path.sql
T

32 lines
1.9 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================
-- W4 升级脚本:cms_site 嵌套 path(《功能修订方案.md》§8 / 附录 A,幂等)
-- 目标库:存量 bsch_cms(生产/预发);干净环境直接用 cms_init.sql 无需本脚本
-- 顺序:加列 → 回填(先顶层后子站,两层固定一轮)→ 约束切换 → 校验
-- ============================================================
-- 1) 加列(存量默认空串,随后回填;已加列则跳过)
ALTER TABLE cms_site ADD COLUMN path VARCHAR(191) NOT NULL DEFAULT '' COMMENT '门户路径(顶层=code;子站=父path/code),URL 唯一标识';
-- 2) 回填:先顶层后子站(幂等:仅处理 path='')
UPDATE cms_site SET path = code WHERE (parent_site_id = 0 OR parent_site_id IS NULL) AND path = '';
UPDATE cms_site s JOIN cms_site p ON s.parent_site_id = p.id
SET s.path = CONCAT(p.path, '/', s.code)
WHERE s.parent_site_id > 0 AND s.path = '';
-- 3) 约束切换(存量数据天然满足:code 曾全局唯一 ⇒ path 唯一)
ALTER TABLE cms_site DROP INDEX uk_site_code;
ALTER TABLE cms_site ADD UNIQUE KEY uk_site_path (path);
ALTER TABLE cms_site ADD UNIQUE KEY uk_site_parent_code (parent_site_id, code);
-- 4) 校验(应返回 0 行)
SELECT id, code, path FROM cms_site WHERE path = '';
-- ============================================================
-- 附:R1 预留模板——学校主站编码改学校 ID(1000xxx)级联重算子站 path
-- (切换生成规则后执行;把 {OLD_PREFIX} 替换为旧前缀、按新编码规则回填顶层)
-- UPDATE cms_site SET path = CONCAT('1000', sch_id) WHERE parent_site_id = 0 AND code LIKE '{OLD_PREFIX}%';
-- UPDATE cms_site s JOIN cms_site p ON s.parent_site_id = p.id
-- SET s.path = CONCAT(p.path, '/', s.code)
-- WHERE s.parent_site_id > 0;
-- ============================================================