32 lines
1.9 KiB
SQL
32 lines
1.9 KiB
SQL
-- ============================================================
|
||
-- 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;
|
||
-- ============================================================
|