-- Issue #13: MySQL 5.7 增量迁移。已在隔离 MySQL 5.7 验证;上线前仍须备份并在目标副本验证。 -- DDL 隐式提交;该脚本不作为自动应用启动步骤。 CREATE TABLE IF NOT EXISTS biz_project_team ( id VARCHAR(64) NOT NULL, team_name VARCHAR(200) NOT NULL, leader_user_id VARCHAR(64) NOT NULL, enabled SMALLINT NOT NULL DEFAULT 1, tenant_no VARCHAR(64) NOT NULL, order_num INT NULL, remark VARCHAR(512) NULL, create_by VARCHAR(64) NULL, create_dept_id VARCHAR(64) NOT NULL DEFAULT '', create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, update_by VARCHAR(64) NULL, update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, del_flag SMALLINT NOT NULL DEFAULT 0, PRIMARY KEY (id), KEY ix_tenant_active (tenant_no, del_flag) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS biz_project_team_member ( id VARCHAR(64) NOT NULL, team_id VARCHAR(64) NOT NULL, user_id VARCHAR(64) NOT NULL, tenant_no VARCHAR(64) NOT NULL, order_num INT NULL, remark VARCHAR(512) NULL, create_by VARCHAR(64) NULL, create_dept_id VARCHAR(64) NOT NULL DEFAULT '', create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, update_by VARCHAR(64) NULL, update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, del_flag SMALLINT NOT NULL DEFAULT 0, PRIMARY KEY (id), KEY ix_tenant_active (tenant_no, del_flag), KEY ix_team (tenant_no, team_id, del_flag) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS biz_project_team_region ( id VARCHAR(64) NOT NULL, team_id VARCHAR(64) NOT NULL, region_id VARCHAR(64) NOT NULL, tenant_no VARCHAR(64) NOT NULL, order_num INT NULL, remark VARCHAR(512) NULL, create_by VARCHAR(64) NULL, create_dept_id VARCHAR(64) NOT NULL DEFAULT '', create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, update_by VARCHAR(64) NULL, update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, del_flag SMALLINT NOT NULL DEFAULT 0, PRIMARY KEY (id), KEY ix_tenant_active (tenant_no, del_flag), KEY ix_team (tenant_no, team_id, del_flag) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS biz_project_team_hospital ( id VARCHAR(64) NOT NULL, team_id VARCHAR(64) NOT NULL, hospital_id VARCHAR(64) NOT NULL, tenant_no VARCHAR(64) NOT NULL, order_num INT NULL, remark VARCHAR(512) NULL, create_by VARCHAR(64) NULL, create_dept_id VARCHAR(64) NOT NULL DEFAULT '', create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, update_by VARCHAR(64) NULL, update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, del_flag SMALLINT NOT NULL DEFAULT 0, PRIMARY KEY (id), KEY ix_tenant_active (tenant_no, del_flag), KEY ix_team (tenant_no, team_id, del_flag) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS biz_project ( id VARCHAR(64) NOT NULL, project_no VARCHAR(64) NOT NULL, project_name VARCHAR(200) NOT NULL, team_id VARCHAR(64) NOT NULL, leader_user_id VARCHAR(64) NOT NULL, biz_types VARCHAR(255) NOT NULL, start_date DATE NULL, end_date DATE NULL, status VARCHAR(16) NOT NULL DEFAULT 'pending', tenant_no VARCHAR(64) NOT NULL, order_num INT NULL, remark VARCHAR(512) NULL, create_by VARCHAR(64) NULL, create_dept_id VARCHAR(64) NOT NULL DEFAULT '', create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, update_by VARCHAR(64) NULL, update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, del_flag SMALLINT NOT NULL DEFAULT 0, PRIMARY KEY (id), KEY ix_tenant_active (tenant_no, del_flag), KEY ix_team (tenant_no, team_id, del_flag), UNIQUE KEY uk_project_tenant_no (tenant_no, project_no) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS biz_project_assignment_audit ( id VARCHAR(64) NOT NULL, biz_type VARCHAR(32) NOT NULL, biz_id VARCHAR(64) NOT NULL, old_project_id VARCHAR(64) NULL, new_project_id VARCHAR(64) NULL, old_project_name VARCHAR(200) NULL, new_project_name VARCHAR(200) NULL, reason VARCHAR(512) NOT NULL, operator_name VARCHAR(100) NULL, tenant_no VARCHAR(64) NOT NULL, order_num INT NULL, remark VARCHAR(512) NULL, create_by VARCHAR(64) NULL, create_dept_id VARCHAR(64) NOT NULL DEFAULT '', create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, update_by VARCHAR(64) NULL, update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, del_flag SMALLINT NOT NULL DEFAULT 0, PRIMARY KEY (id), KEY ix_tenant_active (tenant_no, del_flag), KEY ix_business (tenant_no, biz_type, biz_id, create_time) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 原业务表可能使用不同的默认排序规则;关联列必须与实际项目主键一致。 -- 同时修复已执行旧版迁移的列,不更改原表其他业务列或整库排序规则。 SELECT character_set_name, collation_name INTO @project_charset, @project_collation FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='biz_project' AND column_name='id'; SET @project_ddl = IF( (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='biz_presign_order' AND column_name='project_id')=0, CONCAT('ALTER TABLE biz_presign_order ADD COLUMN project_id VARCHAR(64) CHARACTER SET ', @project_charset, ' COLLATE ', @project_collation, ' NULL'), IF((SELECT collation_name FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='biz_presign_order' AND column_name='project_id') <> @project_collation, CONCAT('ALTER TABLE biz_presign_order MODIFY COLUMN project_id VARCHAR(64) CHARACTER SET ', @project_charset, ' COLLATE ', @project_collation, ' NULL'), 'SELECT 1')); PREPARE project_stmt FROM @project_ddl; EXECUTE project_stmt; DEALLOCATE PREPARE project_stmt; SET @project_ddl = IF( (SELECT COUNT(*) FROM information_schema.statistics WHERE table_schema=DATABASE() AND table_name='biz_presign_order' AND index_name='ix_project_scope')=0, 'ALTER TABLE biz_presign_order ADD INDEX ix_project_scope (tenant_no, project_id, del_flag, create_time)', 'SELECT 1'); PREPARE project_stmt FROM @project_ddl; EXECUTE project_stmt; DEALLOCATE PREPARE project_stmt; SET @project_ddl = IF( (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='biz_collection_protocol' AND column_name='project_id')=0, CONCAT('ALTER TABLE biz_collection_protocol ADD COLUMN project_id VARCHAR(64) CHARACTER SET ', @project_charset, ' COLLATE ', @project_collation, ' NULL'), IF((SELECT collation_name FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='biz_collection_protocol' AND column_name='project_id') <> @project_collation, CONCAT('ALTER TABLE biz_collection_protocol MODIFY COLUMN project_id VARCHAR(64) CHARACTER SET ', @project_charset, ' COLLATE ', @project_collation, ' NULL'), 'SELECT 1')); PREPARE project_stmt FROM @project_ddl; EXECUTE project_stmt; DEALLOCATE PREPARE project_stmt; SET @project_ddl = IF( (SELECT COUNT(*) FROM information_schema.statistics WHERE table_schema=DATABASE() AND table_name='biz_collection_protocol' AND index_name='ix_project_scope')=0, 'ALTER TABLE biz_collection_protocol ADD INDEX ix_project_scope (tenant_no, project_id, del_flag, create_time)', 'SELECT 1'); PREPARE project_stmt FROM @project_ddl; EXECUTE project_stmt; DEALLOCATE PREPARE project_stmt; SET @project_ddl = IF( (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='biz_research_donation' AND column_name='project_id')=0, CONCAT('ALTER TABLE biz_research_donation ADD COLUMN project_id VARCHAR(64) CHARACTER SET ', @project_charset, ' COLLATE ', @project_collation, ' NULL'), IF((SELECT collation_name FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='biz_research_donation' AND column_name='project_id') <> @project_collation, CONCAT('ALTER TABLE biz_research_donation MODIFY COLUMN project_id VARCHAR(64) CHARACTER SET ', @project_charset, ' COLLATE ', @project_collation, ' NULL'), 'SELECT 1')); PREPARE project_stmt FROM @project_ddl; EXECUTE project_stmt; DEALLOCATE PREPARE project_stmt; SET @project_ddl = IF( (SELECT COUNT(*) FROM information_schema.statistics WHERE table_schema=DATABASE() AND table_name='biz_research_donation' AND index_name='ix_project_scope')=0, 'ALTER TABLE biz_research_donation ADD INDEX ix_project_scope (tenant_no, project_id, del_flag, create_time)', 'SELECT 1'); PREPARE project_stmt FROM @project_ddl; EXECUTE project_stmt; DEALLOCATE PREPARE project_stmt; SET @project_ddl = IF( (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='biz_pilot_application' AND column_name='project_id')=0, CONCAT('ALTER TABLE biz_pilot_application ADD COLUMN project_id VARCHAR(64) CHARACTER SET ', @project_charset, ' COLLATE ', @project_collation, ' NULL'), IF((SELECT collation_name FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='biz_pilot_application' AND column_name='project_id') <> @project_collation, CONCAT('ALTER TABLE biz_pilot_application MODIFY COLUMN project_id VARCHAR(64) CHARACTER SET ', @project_charset, ' COLLATE ', @project_collation, ' NULL'), 'SELECT 1')); PREPARE project_stmt FROM @project_ddl; EXECUTE project_stmt; DEALLOCATE PREPARE project_stmt; SET @project_ddl = IF( (SELECT COUNT(*) FROM information_schema.statistics WHERE table_schema=DATABASE() AND table_name='biz_pilot_application' AND index_name='ix_project_scope')=0, 'ALTER TABLE biz_pilot_application ADD INDEX ix_project_scope (tenant_no, project_id, del_flag, create_time)', 'SELECT 1'); PREPARE project_stmt FROM @project_ddl; EXECUTE project_stmt; DEALLOCATE PREPARE project_stmt;