You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

75 lines
4.2 KiB

-- ----------------------------
-- BOTP 规则版本快照表 + 版本号字段。
-- 转换规则(convert_rule)、反写规则(reverse_writing_rules)每保存一次,版本号 +1,
-- 并追加一条全量快照记录:快照以 JSON 内联存储规则主表及其全部子表分录。
-- 请在 tenant-admin 服务指向的默认数据库执行该脚本;脚本可重复执行。
-- ----------------------------
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- 1. 补齐版本号字段(老环境的业务表可能没有 rule_version,MySQL 不支持 ADD COLUMN IF NOT EXISTS,
-- 这里用 information_schema 判断后动态执行,保证脚本可重复执行)
-- ----------------------------
SET @ddl = (SELECT IF(COUNT(*) = 0,
'ALTER TABLE `convert_rule` ADD COLUMN `rule_version` int NOT NULL DEFAULT 1 COMMENT ''规则版本号''',
'DO 0')
FROM information_schema.columns
WHERE table_schema = DATABASE() AND table_name = 'convert_rule' AND column_name = 'rule_version');
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @ddl = (SELECT IF(COUNT(*) = 0,
'ALTER TABLE `reverse_writing_rules` ADD COLUMN `rule_version` int DEFAULT 1 COMMENT ''规则版本号''',
'DO 0')
FROM information_schema.columns
WHERE table_schema = DATABASE() AND table_name = 'reverse_writing_rules' AND column_name = 'rule_version');
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- ----------------------------
-- 2. 历史数据版本号兜底:乐观锁需要有非空版本号做比较基准,空值/非法值统一按首版处理。
-- 只影响版本号为空或小于 1 的行。
-- ----------------------------
UPDATE `convert_rule` SET `rule_version` = 1 WHERE `rule_version` IS NULL OR `rule_version` < 1;
UPDATE `reverse_writing_rules` SET `rule_version` = 1 WHERE `rule_version` IS NULL OR `rule_version` < 1;
-- ----------------------------
-- 3. 转换规则版本快照表
-- ----------------------------
CREATE TABLE IF NOT EXISTS `convert_rule_ver` (
`id` bigint NOT NULL COMMENT '主键',
`rule_id` bigint NOT NULL COMMENT '所属转换规则Id(convert_rule.id)',
`rule_version` int NOT NULL COMMENT '规则版本号',
`snapshot_json` longtext COLLATE utf8mb4_bin COMMENT '全量快照JSON:规则主表 + 字段映射分录 + 插件分录',
`remark` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注(新增保存/修改保存)',
`create_user_id` varchar(50) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人登录名称',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_user_id` varchar(50) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '更新人登录名称',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_convert_rule_ver_rule_version` (`rule_id`, `rule_version`) USING BTREE,
KEY `idx_convert_rule_ver_rule_id` (`rule_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='转换规则版本快照';
-- ----------------------------
-- 4. 反写规则版本快照表
-- ----------------------------
CREATE TABLE IF NOT EXISTS `reverse_writing_rules_ver` (
`id` bigint NOT NULL COMMENT '主键',
`rule_id` bigint NOT NULL COMMENT '所属反写规则Id(reverse_writing_rules.id)',
`rule_version` int NOT NULL COMMENT '规则版本号',
`snapshot_json` longtext COLLATE utf8mb4_bin COMMENT '全量快照JSON:规则主表 + 反写公式分录 + 业务规则分录',
`remark` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注(新增保存/修改保存)',
`create_user_id` varchar(50) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人登录名称',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_user_id` varchar(50) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '更新人登录名称',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_reverse_writing_rules_ver_rule_version` (`rule_id`, `rule_version`) USING BTREE,
KEY `idx_reverse_writing_rules_ver_rule_id` (`rule_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='反写规则版本快照';
SET FOREIGN_KEY_CHECKS = 1;