Compare commits
3 Commits
7c5110b6d2
...
69d00d7650
| Author | SHA1 | Date | |
|---|---|---|---|
| 69d00d7650 | |||
| 2b611f6c17 | |||
| 48172921d7 |
14
reading-platform-java/clean-flyway-v41.sql
Normal file
14
reading-platform-java/clean-flyway-v41.sql
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
-- =====================================================
|
||||||
|
-- 清理 Flyway 失败的 V41 迁移记录
|
||||||
|
-- 执行时间:2026-03-19
|
||||||
|
-- 说明:在执行 V41 迁移脚本之前,先清理失败的迁移记录
|
||||||
|
-- =====================================================
|
||||||
|
|
||||||
|
-- 删除 V41 的失败记录
|
||||||
|
DELETE FROM flyway_schema_history WHERE version = '41';
|
||||||
|
|
||||||
|
-- 验证清理结果
|
||||||
|
SELECT version, description, state, installed_on
|
||||||
|
FROM flyway_schema_history
|
||||||
|
ORDER BY installed_on DESC
|
||||||
|
LIMIT 10;
|
||||||
@ -2,7 +2,7 @@
|
|||||||
-- 迁移 V41: 中间表优化 - 移除联合唯一索引和 deleted 字段
|
-- 迁移 V41: 中间表优化 - 移除联合唯一索引和 deleted 字段
|
||||||
-- 版本:V41
|
-- 版本:V41
|
||||||
-- 创建时间:2026-03-19
|
-- 创建时间:2026-03-19
|
||||||
-- 描述:
|
-- 描述:
|
||||||
-- 1. 中间表使用物理删除,不再保留 deleted 字段
|
-- 1. 中间表使用物理删除,不再保留 deleted 字段
|
||||||
-- 2. 移除不必要的联合唯一索引,通过应用层控制数据一致性
|
-- 2. 移除不必要的联合唯一索引,通过应用层控制数据一致性
|
||||||
-- 3. 适用于单体应用、低并发场景
|
-- 3. 适用于单体应用、低并发场景
|
||||||
@ -13,57 +13,149 @@
|
|||||||
-- -----------------------------------------------------
|
-- -----------------------------------------------------
|
||||||
-- 说明:纯关联表,先删后增的更新模式,不需要唯一索引兜底
|
-- 说明:纯关联表,先删后增的更新模式,不需要唯一索引兜底
|
||||||
|
|
||||||
-- 删除联合唯一索引
|
-- 使用存储过程删除索引(如果存在)
|
||||||
ALTER TABLE `course_collection_package` DROP INDEX IF EXISTS `uk_collection_package`;
|
DROP PROCEDURE IF EXISTS drop_ccp_indexes;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE PROCEDURE drop_ccp_indexes()
|
||||||
|
BEGIN
|
||||||
|
-- 删除联合唯一索引(如果存在)
|
||||||
|
IF EXISTS (SELECT 1 FROM information_schema.TABLE_CONSTRAINTS
|
||||||
|
WHERE CONSTRAINT_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'course_collection_package'
|
||||||
|
AND CONSTRAINT_NAME = 'uk_collection_package') THEN
|
||||||
|
ALTER TABLE `course_collection_package` DROP INDEX `uk_collection_package`;
|
||||||
|
END IF;
|
||||||
|
|
||||||
-- 删除 deleted 字段
|
-- 删除 deleted 字段(如果存在)
|
||||||
ALTER TABLE `course_collection_package` DROP COLUMN IF EXISTS `deleted`;
|
IF EXISTS (SELECT 1 FROM information_schema.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'course_collection_package'
|
||||||
|
AND COLUMN_NAME = 'deleted') THEN
|
||||||
|
ALTER TABLE `course_collection_package` DROP COLUMN `deleted`;
|
||||||
|
END IF;
|
||||||
|
|
||||||
-- 保留普通索引(提高查询性能)
|
-- 删除普通索引(如果存在)
|
||||||
|
IF EXISTS (SELECT 1 FROM information_schema.STATISTICS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'course_collection_package'
|
||||||
|
AND INDEX_NAME = 'idx_collection_id') THEN
|
||||||
|
ALTER TABLE `course_collection_package` DROP INDEX `idx_collection_id`;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF EXISTS (SELECT 1 FROM information_schema.STATISTICS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'course_collection_package'
|
||||||
|
AND INDEX_NAME = 'idx_package_id') THEN
|
||||||
|
ALTER TABLE `course_collection_package` DROP INDEX `idx_package_id`;
|
||||||
|
END IF;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
-- 执行存储过程
|
||||||
|
CALL drop_ccp_indexes();
|
||||||
|
|
||||||
|
-- 添加普通索引
|
||||||
ALTER TABLE `course_collection_package`
|
ALTER TABLE `course_collection_package`
|
||||||
ADD INDEX IF NOT EXISTS `idx_collection_id` (`collection_id`),
|
ADD INDEX `idx_collection_id` (`collection_id`),
|
||||||
ADD INDEX IF NOT EXISTS `idx_package_id` (`package_id`);
|
ADD INDEX `idx_package_id` (`package_id`);
|
||||||
|
|
||||||
|
-- 删除存储过程
|
||||||
|
DROP PROCEDURE IF EXISTS drop_ccp_indexes;
|
||||||
|
|
||||||
-- -----------------------------------------------------
|
-- -----------------------------------------------------
|
||||||
-- 2. tenant_course(租户 - 课程关联表)
|
-- 2. tenant_course(租户 - 课程关联表)
|
||||||
-- -----------------------------------------------------
|
-- -----------------------------------------------------
|
||||||
-- 说明:纯关联表,授权关系,不需要唯一索引兜底
|
-- 说明:纯关联表,授权关系,不需要唯一索引兜底
|
||||||
|
|
||||||
-- 删除联合唯一索引
|
DROP PROCEDURE IF EXISTS drop_tc_indexes;
|
||||||
ALTER TABLE `tenant_course` DROP INDEX IF EXISTS `uk_tenant_course`;
|
DELIMITER $$
|
||||||
|
CREATE PROCEDURE drop_tc_indexes()
|
||||||
|
BEGIN
|
||||||
|
-- 删除联合唯一索引(如果存在)
|
||||||
|
IF EXISTS (SELECT 1 FROM information_schema.TABLE_CONSTRAINTS
|
||||||
|
WHERE CONSTRAINT_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'tenant_course'
|
||||||
|
AND CONSTRAINT_NAME = 'uk_tenant_course') THEN
|
||||||
|
ALTER TABLE `tenant_course` DROP INDEX `uk_tenant_course`;
|
||||||
|
END IF;
|
||||||
|
|
||||||
-- 删除 deleted 字段
|
-- 删除 deleted 字段(如果存在)
|
||||||
ALTER TABLE `tenant_course` DROP COLUMN IF EXISTS `deleted`;
|
IF EXISTS (SELECT 1 FROM information_schema.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'tenant_course'
|
||||||
|
AND COLUMN_NAME = 'deleted') THEN
|
||||||
|
ALTER TABLE `tenant_course` DROP COLUMN `deleted`;
|
||||||
|
END IF;
|
||||||
|
|
||||||
-- 保留普通索引
|
-- 删除普通索引(如果存在)
|
||||||
|
IF EXISTS (SELECT 1 FROM information_schema.STATISTICS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'tenant_course'
|
||||||
|
AND INDEX_NAME = 'idx_tenant_id') THEN
|
||||||
|
ALTER TABLE `tenant_course` DROP INDEX `idx_tenant_id`;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF EXISTS (SELECT 1 FROM information_schema.STATISTICS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'tenant_course'
|
||||||
|
AND INDEX_NAME = 'idx_course_id') THEN
|
||||||
|
ALTER TABLE `tenant_course` DROP INDEX `idx_course_id`;
|
||||||
|
END IF;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
-- 执行存储过程
|
||||||
|
CALL drop_tc_indexes();
|
||||||
|
|
||||||
|
-- 添加普通索引
|
||||||
ALTER TABLE `tenant_course`
|
ALTER TABLE `tenant_course`
|
||||||
ADD INDEX IF NOT EXISTS `idx_tenant_id` (`tenant_id`),
|
ADD INDEX `idx_tenant_id` (`tenant_id`),
|
||||||
ADD INDEX IF NOT EXISTS `idx_course_id` (`course_id`);
|
ADD INDEX `idx_course_id` (`course_id`);
|
||||||
|
|
||||||
|
-- 删除存储过程
|
||||||
|
DROP PROCEDURE IF EXISTS drop_tc_indexes;
|
||||||
|
|
||||||
-- -----------------------------------------------------
|
-- -----------------------------------------------------
|
||||||
-- 3. class_teacher(班级 - 教师关联表)
|
-- 3. class_teacher(班级 - 教师关联表)
|
||||||
-- -----------------------------------------------------
|
-- -----------------------------------------------------
|
||||||
-- 说明:纯关联表,不需要 deleted 字段
|
-- 说明:纯关联表,不需要 deleted 字段
|
||||||
|
|
||||||
-- 删除 deleted 字段
|
DROP PROCEDURE IF EXISTS drop_ct_indexes;
|
||||||
ALTER TABLE `class_teacher` DROP COLUMN IF EXISTS `deleted`;
|
DELIMITER $$
|
||||||
|
CREATE PROCEDURE drop_ct_indexes()
|
||||||
|
BEGIN
|
||||||
|
-- 删除 deleted 字段(如果存在)
|
||||||
|
IF EXISTS (SELECT 1 FROM information_schema.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'class_teacher'
|
||||||
|
AND COLUMN_NAME = 'deleted') THEN
|
||||||
|
ALTER TABLE `class_teacher` DROP COLUMN `deleted`;
|
||||||
|
END IF;
|
||||||
|
|
||||||
-- 保留普通索引
|
-- 删除普通索引(如果存在)
|
||||||
|
IF EXISTS (SELECT 1 FROM information_schema.STATISTICS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'class_teacher'
|
||||||
|
AND INDEX_NAME = 'idx_class_id') THEN
|
||||||
|
ALTER TABLE `class_teacher` DROP INDEX `idx_class_id`;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF EXISTS (SELECT 1 FROM information_schema.STATISTICS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = 'class_teacher'
|
||||||
|
AND INDEX_NAME = 'idx_teacher_id') THEN
|
||||||
|
ALTER TABLE `class_teacher` DROP INDEX `idx_teacher_id`;
|
||||||
|
END IF;
|
||||||
|
END$$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
-- 执行存储过程
|
||||||
|
CALL drop_ct_indexes();
|
||||||
|
|
||||||
|
-- 添加普通索引
|
||||||
ALTER TABLE `class_teacher`
|
ALTER TABLE `class_teacher`
|
||||||
ADD INDEX IF NOT EXISTS `idx_class_id` (`class_id`),
|
ADD INDEX `idx_class_id` (`class_id`),
|
||||||
ADD INDEX IF NOT EXISTS `idx_teacher_id` (`teacher_id`);
|
ADD INDEX `idx_teacher_id` (`teacher_id`);
|
||||||
|
|
||||||
-- -----------------------------------------------------
|
-- 删除存储过程
|
||||||
-- 备注:以下表保留联合唯一索引和 deleted 字段
|
DROP PROCEDURE IF EXISTS drop_ct_indexes;
|
||||||
-- -----------------------------------------------------
|
|
||||||
-- 1. parent_student(家长 - 学生关系)
|
|
||||||
-- - 关系相对稳定,有业务历史价值
|
|
||||||
-- - 保留 uk_parent_student 和 deleted 字段
|
|
||||||
--
|
|
||||||
-- 2. system_setting(系统设置)
|
|
||||||
-- - 配置表,(tenant_id, setting_key) 天然应该唯一
|
|
||||||
-- - 保留 uk_tenant_key 和 deleted 字段
|
|
||||||
--
|
|
||||||
-- 3. tenant_package(租户 - 套餐授权)
|
|
||||||
-- - 合同性质,有历史价值
|
|
||||||
-- - 保留 deleted 字段
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user