SET @db_name = DATABASE(); -- ---------------------------- -- 养生课程小节资源表结构升级 -- 目标: -- 1. 新增 course_type / video_source_type / video_file_name -- 2. 迁移旧 sale_type 到 sale_price 语义 -- 3. 删除 chapter_remark / sale_type / play_count -- 4. 新增 course_type 维度索引 -- ---------------------------- SET @video_table_exists = ( SELECT COUNT(1) FROM information_schema.TABLES WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'tcm_health_course_video' ); SET @sql_assert_video_table = IF( @video_table_exists = 0, 'SELECT ''skip: tcm_health_course_video not exists''', 'SELECT 1' ); PREPARE stmt_assert_video_table FROM @sql_assert_video_table; EXECUTE stmt_assert_video_table; DEALLOCATE PREPARE stmt_assert_video_table; SET @has_course_type = ( SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'tcm_health_course_video' AND COLUMN_NAME = 'course_type' ); SET @sql_add_course_type = IF( @video_table_exists = 1 AND @has_course_type = 0, 'ALTER TABLE `tcm_health_course_video` ADD COLUMN `course_type` TINYINT NOT NULL DEFAULT 1 COMMENT ''课程类型:1养生课程'' AFTER `id`', 'SELECT 1' ); PREPARE stmt_add_course_type FROM @sql_add_course_type; EXECUTE stmt_add_course_type; DEALLOCATE PREPARE stmt_add_course_type; SET @has_video_source_type = ( SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'tcm_health_course_video' AND COLUMN_NAME = 'video_source_type' ); SET @sql_add_video_source_type = IF( @video_table_exists = 1 AND @has_video_source_type = 0, 'ALTER TABLE `tcm_health_course_video` ADD COLUMN `video_source_type` TINYINT NOT NULL DEFAULT 1 COMMENT ''视频来源:1视频地址 2本地上传'' AFTER `chapter_name`', 'SELECT 1' ); PREPARE stmt_add_video_source_type FROM @sql_add_video_source_type; EXECUTE stmt_add_video_source_type; DEALLOCATE PREPARE stmt_add_video_source_type; SET @has_video_file_name = ( SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'tcm_health_course_video' AND COLUMN_NAME = 'video_file_name' ); SET @sql_add_video_file_name = IF( @video_table_exists = 1 AND @has_video_file_name = 0, 'ALTER TABLE `tcm_health_course_video` ADD COLUMN `video_file_name` VARCHAR(255) DEFAULT NULL COMMENT ''本地上传原始文件名'' AFTER `video_url`', 'SELECT 1' ); PREPARE stmt_add_video_file_name FROM @sql_add_video_file_name; EXECUTE stmt_add_video_file_name; DEALLOCATE PREPARE stmt_add_video_file_name; SET @has_sale_type = ( SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'tcm_health_course_video' AND COLUMN_NAME = 'sale_type' ); SET @sql_migrate_sale_price = IF( @video_table_exists = 1 AND @has_sale_type = 1, 'UPDATE `tcm_health_course_video` SET `sale_price` = CASE WHEN `sale_type` = 0 THEN 0.00 WHEN `sale_price` IS NULL THEN 0.00 ELSE `sale_price` END', 'SELECT 1' ); PREPARE stmt_migrate_sale_price FROM @sql_migrate_sale_price; EXECUTE stmt_migrate_sale_price; DEALLOCATE PREPARE stmt_migrate_sale_price; SET @sql_fill_course_type = IF( @video_table_exists = 1, 'UPDATE `tcm_health_course_video` SET `course_type` = 1 WHERE `course_type` IS NULL OR `course_type` = 0', 'SELECT 1' ); PREPARE stmt_fill_course_type FROM @sql_fill_course_type; EXECUTE stmt_fill_course_type; DEALLOCATE PREPARE stmt_fill_course_type; SET @sql_fill_video_source_type = IF( @video_table_exists = 1, 'UPDATE `tcm_health_course_video` SET `video_source_type` = 1 WHERE `video_source_type` IS NULL OR `video_source_type` = 0', 'SELECT 1' ); PREPARE stmt_fill_video_source_type FROM @sql_fill_video_source_type; EXECUTE stmt_fill_video_source_type; DEALLOCATE PREPARE stmt_fill_video_source_type; SET @has_sale_type_index = ( SELECT COUNT(1) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'tcm_health_course_video' AND INDEX_NAME = 'idx_health_course_video_sale_type' ); SET @sql_drop_sale_type_index = IF( @video_table_exists = 1 AND @has_sale_type_index = 1, 'ALTER TABLE `tcm_health_course_video` DROP INDEX `idx_health_course_video_sale_type`', 'SELECT 1' ); PREPARE stmt_drop_sale_type_index FROM @sql_drop_sale_type_index; EXECUTE stmt_drop_sale_type_index; DEALLOCATE PREPARE stmt_drop_sale_type_index; SET @has_course_type_status_index = ( SELECT COUNT(1) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'tcm_health_course_video' AND INDEX_NAME = 'idx_health_course_video_type_status' ); SET @sql_add_course_type_status_index = IF( @video_table_exists = 1 AND @has_course_type_status_index = 0, 'ALTER TABLE `tcm_health_course_video` ADD INDEX `idx_health_course_video_type_status` (`course_type`, `status`)', 'SELECT 1' ); PREPARE stmt_add_course_type_status_index FROM @sql_add_course_type_status_index; EXECUTE stmt_add_course_type_status_index; DEALLOCATE PREPARE stmt_add_course_type_status_index; SET @has_chapter_remark = ( SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'tcm_health_course_video' AND COLUMN_NAME = 'chapter_remark' ); SET @sql_drop_chapter_remark = IF( @video_table_exists = 1 AND @has_chapter_remark = 1, 'ALTER TABLE `tcm_health_course_video` DROP COLUMN `chapter_remark`', 'SELECT 1' ); PREPARE stmt_drop_chapter_remark FROM @sql_drop_chapter_remark; EXECUTE stmt_drop_chapter_remark; DEALLOCATE PREPARE stmt_drop_chapter_remark; SET @sql_drop_sale_type_column = IF( @video_table_exists = 1 AND @has_sale_type = 1, 'ALTER TABLE `tcm_health_course_video` DROP COLUMN `sale_type`', 'SELECT 1' ); PREPARE stmt_drop_sale_type_column FROM @sql_drop_sale_type_column; EXECUTE stmt_drop_sale_type_column; DEALLOCATE PREPARE stmt_drop_sale_type_column; SET @has_play_count = ( SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'tcm_health_course_video' AND COLUMN_NAME = 'play_count' ); SET @sql_drop_play_count = IF( @video_table_exists = 1 AND @has_play_count = 1, 'ALTER TABLE `tcm_health_course_video` DROP COLUMN `play_count`', 'SELECT 1' ); PREPARE stmt_drop_play_count FROM @sql_drop_play_count; EXECUTE stmt_drop_play_count; DEALLOCATE PREPARE stmt_drop_play_count;