100 lines
5.9 KiB
SQL
100 lines
5.9 KiB
SQL
-- ==============================================================================
|
|||
|
|
-- RailwaySystem V2 -> MySQL 5.7 结构对账脚本 (reconcile_mysql_5_7.sql)
|
||
|
|
-- 适用数据库: MySQL 5.7 (线上部署库)
|
||
|
|
-- 目标: 将线上 MySQL 表结构对齐 V2 基线,消除两类反复出现的错误:
|
||
|
|
-- 1) Field 'create_time' doesn't have a default value
|
||
|
|
-- 2) Unknown column 'xxx' in 'field list' (缺失列)
|
||
|
|
-- 说明:
|
||
|
|
-- * 本脚本只"设置默认值 / 按需补列",**不改列类型**,对已有默认值的列为幂等操作。
|
||
|
|
-- * 使用 information_schema 守卫,列已存在/已有默认也不会报错,可重复执行。
|
||
|
|
-- * train_class_report 的 alloc_* 列: 应用当前 mapper 仍在 SELECT,故补回;
|
||
|
|
-- 若后续按最终 V2 设计改为依赖 train_dorm_auth,应同步清理应用侧(见文件末尾说明)。
|
||
|
|
-- 执行: mysql -u<user> -p<pass> railwaysystem < reconcile_mysql_5_7.sql
|
||
|
|
-- ==============================================================================
|
||
|
|
|
||
|
|
DELIMITER $$
|
||
|
|
|
||
|
|
-- 仅当列存在时设置默认值(列名/表名已存在即可,重复设置同值幂等)
|
||
|
|
DROP PROCEDURE IF EXISTS set_default_if_missing $$
|
||
|
|
CREATE PROCEDURE set_default_if_missing(
|
||
|
|
IN p_tbl VARCHAR(64), IN p_col VARCHAR(64), IN p_def VARCHAR(255)
|
||
|
|
)
|
||
|
|
BEGIN
|
||
|
|
IF EXISTS (
|
||
|
|
SELECT 1 FROM information_schema.columns
|
||
|
|
WHERE table_schema = DATABASE() AND table_name = p_tbl AND column_name = p_col
|
||
|
|
) THEN
|
||
|
|
SET @stmt = CONCAT('ALTER TABLE `', p_tbl, '` ALTER COLUMN `', p_col, '` SET DEFAULT ', p_def);
|
||
|
|
PREPARE s FROM @stmt;
|
||
|
|
EXECUTE s;
|
||
|
|
DEALLOCATE PREPARE s;
|
||
|
|
END IF;
|
||
|
|
END $$
|
||
|
|
|
||
|
|
-- 仅当列不存在时新增列
|
||
|
|
DROP PROCEDURE IF EXISTS add_col_if_missing $$
|
||
|
|
CREATE PROCEDURE add_col_if_missing(
|
||
|
|
IN p_tbl VARCHAR(64), IN p_col VARCHAR(64), IN p_spec VARCHAR(255)
|
||
|
|
)
|
||
|
|
BEGIN
|
||
|
|
IF NOT EXISTS (
|
||
|
|
SELECT 1 FROM information_schema.columns
|
||
|
|
WHERE table_schema = DATABASE() AND table_name = p_tbl AND column_name = p_col
|
||
|
|
) THEN
|
||
|
|
SET @stmt = CONCAT('ALTER TABLE `', p_tbl, '` ADD COLUMN `', p_col, '` ', p_spec);
|
||
|
|
PREPARE s FROM @stmt;
|
||
|
|
EXECUTE s;
|
||
|
|
DEALLOCATE PREPARE s;
|
||
|
|
END IF;
|
||
|
|
END $$
|
||
|
|
|
||
|
|
DELIMITER ;
|
||
|
|
|
||
|
|
-- ------------------------------------------------------------------------------
|
||
|
|
-- 1) train_class_report: 补齐应用 mapper 仍在 SELECT 的 alloc_* 列 (若已加则跳过)
|
||
|
|
-- ------------------------------------------------------------------------------
|
||
|
|
CALL add_col_if_missing('train_class_report', 'alloc_dorm_id', 'VARCHAR(32) NULL');
|
||
|
|
CALL add_col_if_missing('train_class_report', 'alloc_classroom_id', 'VARCHAR(32) NULL');
|
||
|
|
CALL add_col_if_missing('train_class_report', 'alloc_site_id', 'VARCHAR(32) NULL');
|
||
|
|
|
||
|
|
-- ------------------------------------------------------------------------------
|
||
|
|
-- 2) 为所有 V2 业务表的 create_time 补默认值 (核心: 消除当前 'doesn''t have a default value')
|
||
|
|
-- V2 基线均为 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,线上 5.7 翻译时丢失。
|
||
|
|
-- ------------------------------------------------------------------------------
|
||
|
|
CALL set_default_if_missing('train_resource', 'create_time', 'CURRENT_TIMESTAMP');
|
||
|
|
CALL set_default_if_missing('train_course_resource', 'create_time', 'CURRENT_TIMESTAMP');
|
||
|
|
CALL set_default_if_missing('train_plan_course', 'create_time', 'CURRENT_TIMESTAMP');
|
||
|
|
CALL set_default_if_missing('train_enrollment', 'create_time', 'CURRENT_TIMESTAMP');
|
||
|
|
CALL set_default_if_missing('train_lesson', 'create_time', 'CURRENT_TIMESTAMP');
|
||
|
|
CALL set_default_if_missing('train_accommodation', 'create_time', 'CURRENT_TIMESTAMP');
|
||
|
|
CALL set_default_if_missing('train_score_item', 'create_time', 'CURRENT_TIMESTAMP');
|
||
|
|
CALL set_default_if_missing('train_student_score', 'create_time', 'CURRENT_TIMESTAMP');
|
||
|
|
CALL set_default_if_missing('train_class_report', 'create_time', 'CURRENT_TIMESTAMP');
|
||
|
|
CALL set_default_if_missing('train_dorm_auth', 'create_time', 'CURRENT_TIMESTAMP');
|
||
|
|
CALL set_default_if_missing('train_student_checkin', 'create_time', 'CURRENT_TIMESTAMP');
|
||
|
|
CALL set_default_if_missing('train_study_duration', 'create_time', 'CURRENT_TIMESTAMP');
|
||
|
|
CALL set_default_if_missing('train_student_portrait', 'create_time', 'CURRENT_TIMESTAMP');
|
||
|
|
CALL set_default_if_missing('train_electronic_board', 'create_time', 'CURRENT_TIMESTAMP');
|
||
|
|
CALL set_default_if_missing('train_classroom_info', 'create_time', 'CURRENT_TIMESTAMP');
|
||
|
|
CALL set_default_if_missing('train_training_site', 'create_time', 'CURRENT_TIMESTAMP');
|
||
|
|
CALL set_default_if_missing('train_dormitory_info', 'create_time', 'CURRENT_TIMESTAMP');
|
||
|
|
CALL set_default_if_missing('train_class_plan', 'create_time', 'CURRENT_TIMESTAMP');
|
||
|
|
|
||
|
|
-- ------------------------------------------------------------------------------
|
||
|
|
-- 3) 其它 V2 中 NOT NULL 且带默认值、但线上可能丢失的列
|
||
|
|
-- ------------------------------------------------------------------------------
|
||
|
|
CALL set_default_if_missing('train_resource', 'status', '1');
|
||
|
|
CALL set_default_if_missing('train_resource', 'del_flag', '''0''');
|
||
|
|
CALL set_default_if_missing('train_enrollment', 'enrollment_status', '0');
|
||
|
|
CALL set_default_if_missing('train_accommodation', 'assigned_time', 'CURRENT_TIMESTAMP');
|
||
|
|
CALL set_default_if_missing('train_accommodation', 'accommodation_status', '0');
|
||
|
|
CALL set_default_if_missing('train_score_item', 'item_type', '1');
|
||
|
|
CALL set_default_if_missing('train_score_item', 'weight', '0.00');
|
||
|
|
CALL set_default_if_missing('train_score_item', 'full_score', '100.00');
|
||
|
|
CALL set_default_if_missing('train_student_score', 'import_time', 'CURRENT_TIMESTAMP');
|
||
|
|
|
||
|
|
-- ------------------------------------------------------------------------------
|
||
|
|
-- 清理临时存储过程
|
||
|
|
-- ------------------------------------------------------------------------------
|
||
|
|
DROP PROCEDURE IF EXISTS set_default_if_missing;
|
||
|
|
DROP PROCEDURE IF EXISTS add_col_if_missing;
|