| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- -- ============================================================
- -- 场景模块数据库迁移脚本
- -- 用途:对齐 Go 版本的场景模块功能
- -- 创建时间:2026-04-02
- -- ============================================================
- -- 1. 创建场景模板表
- -- ============================================================
- CREATE TABLE IF NOT EXISTS `scene_template` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `scene_name` varchar(255) NOT NULL COMMENT '场景名称',
- `scene_type` varchar(100) NOT NULL COMMENT '场景类型(如 bridge, tunnel)',
- `scene_desc` text COMMENT '场景描述',
- `model_name` varchar(255) NOT NULL COMMENT 'YOLO 模型名称',
- `created_at` bigint DEFAULT NULL COMMENT '创建时间(Unix 时间戳)',
- `updated_at` bigint DEFAULT NULL COMMENT '更新时间(Unix 时间戳)',
- `deleted_at` bigint DEFAULT NULL COMMENT '删除时间(Unix 时间戳)',
- `is_deleted` bigint DEFAULT '0' COMMENT '是否删除 0:否 1:是',
- PRIMARY KEY (`id`),
- KEY `idx_scene_type` (`scene_type`),
- KEY `idx_is_deleted` (`is_deleted`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='场景模板表';
- -- 2. 检查并添加 recognition_record 表缺失字段
- -- ============================================================
- -- 2.1 添加 scene_type 字段(如果不存在)
- SET @column_exists = (
- SELECT COUNT(*)
- FROM INFORMATION_SCHEMA.COLUMNS
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME = 'recognition_record'
- AND COLUMN_NAME = 'scene_type'
- );
- SET @sql = IF(@column_exists = 0,
- 'ALTER TABLE `recognition_record` ADD COLUMN `scene_type` varchar(100) DEFAULT '''' COMMENT ''场景类型'' AFTER `user_id`',
- 'SELECT ''scene_type 字段已存在'' AS message'
- );
- PREPARE stmt FROM @sql;
- EXECUTE stmt;
- DEALLOCATE PREPARE stmt;
- -- 2.2 添加 hazard_count 字段(如果不存在)
- SET @column_exists = (
- SELECT COUNT(*)
- FROM INFORMATION_SCHEMA.COLUMNS
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME = 'recognition_record'
- AND COLUMN_NAME = 'hazard_count'
- );
- SET @sql = IF(@column_exists = 0,
- 'ALTER TABLE `recognition_record` ADD COLUMN `hazard_count` int DEFAULT 0 COMMENT ''隐患数量'' AFTER `recognition_image_url`',
- 'SELECT ''hazard_count 字段已存在'' AS message'
- );
- PREPARE stmt FROM @sql;
- EXECUTE stmt;
- DEALLOCATE PREPARE stmt;
- -- 2.3 添加 current_step 字段(如果不存在)
- SET @column_exists = (
- SELECT COUNT(*)
- FROM INFORMATION_SCHEMA.COLUMNS
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME = 'recognition_record'
- AND COLUMN_NAME = 'current_step'
- );
- SET @sql = IF(@column_exists = 0,
- 'ALTER TABLE `recognition_record` ADD COLUMN `current_step` int DEFAULT 1 COMMENT ''当前步骤(1-3)'' AFTER `hazard_count`',
- 'SELECT ''current_step 字段已存在'' AS message'
- );
- PREPARE stmt FROM @sql;
- EXECUTE stmt;
- DEALLOCATE PREPARE stmt;
- -- 2.4 添加 hazard_details 字段(如果不存在)
- SET @column_exists = (
- SELECT COUNT(*)
- FROM INFORMATION_SCHEMA.COLUMNS
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME = 'recognition_record'
- AND COLUMN_NAME = 'hazard_details'
- );
- SET @sql = IF(@column_exists = 0,
- 'ALTER TABLE `recognition_record` ADD COLUMN `hazard_details` text COMMENT ''隐患详情 JSON'' AFTER `current_step`',
- 'SELECT ''hazard_details 字段已存在'' AS message'
- );
- PREPARE stmt FROM @sql;
- EXECUTE stmt;
- DEALLOCATE PREPARE stmt;
- -- 3. 添加索引(如果不存在)
- -- ============================================================
- -- 3.1 添加 scene_type 索引
- SET @index_exists = (
- SELECT COUNT(*)
- FROM INFORMATION_SCHEMA.STATISTICS
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME = 'recognition_record'
- AND INDEX_NAME = 'idx_scene_type'
- );
- SET @sql = IF(@index_exists = 0,
- 'ALTER TABLE `recognition_record` ADD INDEX `idx_scene_type` (`scene_type`)',
- 'SELECT ''idx_scene_type 索引已存在'' AS message'
- );
- PREPARE stmt FROM @sql;
- EXECUTE stmt;
- DEALLOCATE PREPARE stmt;
- -- 3.2 添加联合索引(user_id + created_at)
- SET @index_exists = (
- SELECT COUNT(*)
- FROM INFORMATION_SCHEMA.STATISTICS
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME = 'recognition_record'
- AND INDEX_NAME = 'idx_user_created'
- );
- SET @sql = IF(@index_exists = 0,
- 'ALTER TABLE `recognition_record` ADD INDEX `idx_user_created` (`user_id`, `created_at`)',
- 'SELECT ''idx_user_created 索引已存在'' AS message'
- );
- PREPARE stmt FROM @sql;
- EXECUTE stmt;
- DEALLOCATE PREPARE stmt;
- -- 4. 验证迁移结果
- -- ============================================================
- SELECT '=== 迁移完成,验证表结构 ===' AS message;
- -- 验证 scene_template 表
- SELECT
- TABLE_NAME,
- TABLE_COMMENT,
- TABLE_ROWS
- FROM INFORMATION_SCHEMA.TABLES
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME = 'scene_template';
- -- 验证 recognition_record 表新增字段
- SELECT
- COLUMN_NAME,
- COLUMN_TYPE,
- COLUMN_DEFAULT,
- COLUMN_COMMENT
- FROM INFORMATION_SCHEMA.COLUMNS
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME = 'recognition_record'
- AND COLUMN_NAME IN ('scene_type', 'hazard_count', 'current_step', 'hazard_details')
- ORDER BY ORDINAL_POSITION;
- -- 验证索引
- SELECT
- INDEX_NAME,
- COLUMN_NAME,
- SEQ_IN_INDEX
- FROM INFORMATION_SCHEMA.STATISTICS
- WHERE TABLE_SCHEMA = DATABASE()
- AND TABLE_NAME = 'recognition_record'
- AND INDEX_NAME IN ('idx_scene_type', 'idx_user_created')
- ORDER BY INDEX_NAME, SEQ_IN_INDEX;
- SELECT '=== 迁移脚本执行完成 ===' AS message;
|