-- VIN 车辆绑定字段统一改名:appp_user_id -> app_user_id(含索引与注释) -- 背景:历史拼写错误(三个 p)已废弃,全链路统一为 app_user_id。 -- 目标库:charging_pile_account.t_vin_management -- 适用:MySQL(含 Mycat 代理下的 MySQL 8 后端)。Mycat 对 PREPARE/INFORMATION_SCHEMA 变量支持不稳定时, -- 可直接执行下方「直接 DDL」小节并回查。 -- 脚本幂等:列/索引若已是 app_user_id 则自动跳过。 USE `charging_pile_account`; SET @has_old_column := ( SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'charging_pile_account' AND TABLE_NAME = 't_vin_management' AND COLUMN_NAME = 'appp_user_id' ); SET @has_new_column := ( SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'charging_pile_account' AND TABLE_NAME = 't_vin_management' AND COLUMN_NAME = 'app_user_id' ); SET @rename_column_sql := IF( @has_old_column = 1 AND @has_new_column = 0, 'ALTER TABLE `t_vin_management` CHANGE COLUMN `appp_user_id` `app_user_id` bigint NULL DEFAULT NULL COMMENT ''绑定的小程序用户ID'' AFTER `del_flag`', 'SELECT 1' ); PREPARE rename_column_stmt FROM @rename_column_sql; EXECUTE rename_column_stmt; DEALLOCATE PREPARE rename_column_stmt; SET @has_old_index := ( SELECT COUNT(1) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = 'charging_pile_account' AND TABLE_NAME = 't_vin_management' AND INDEX_NAME = 'idx_appp_user_id' ); SET @has_new_index := ( SELECT COUNT(1) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = 'charging_pile_account' AND TABLE_NAME = 't_vin_management' AND INDEX_NAME = 'idx_app_user_id' ); -- 旧索引改名(MySQL 8 / Mycat 透传不支持时改为 DROP+ADD 两条直接 DDL 手动执行) SET @rename_index_sql := IF( @has_old_index = 1 AND @has_new_index = 0, 'ALTER TABLE `t_vin_management` RENAME INDEX `idx_appp_user_id` TO `idx_app_user_id`', 'SELECT 1' ); PREPARE rename_index_stmt FROM @rename_index_sql; EXECUTE rename_index_stmt; DEALLOCATE PREPARE rename_index_stmt; -- 兜底:新列已存在但缺少索引时补建(兼容旧环境索引名不是 idx_app_user_id 的情况) SET @ensure_index_sql := IF( @has_new_column = 1 AND @has_new_index = 0, 'ALTER TABLE `t_vin_management` ADD INDEX `idx_app_user_id` (`app_user_id`)', 'SELECT 1' ); PREPARE ensure_index_stmt FROM @ensure_index_sql; EXECUTE ensure_index_stmt; DEALLOCATE PREPARE ensure_index_stmt; -- 注释兜底:确保 app_user_id 注释为「绑定的小程序用户ID」(无「三个p」字样) SET @comment_exists := ( SELECT COUNT(1) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'charging_pile_account' AND TABLE_NAME = 't_vin_management' AND COLUMN_NAME = 'app_user_id' AND COLUMN_COMMENT LIKE '%三个p%' ); SET @fix_comment_sql := IF( @has_new_column = 1 AND @comment_exists = 1, 'ALTER TABLE `t_vin_management` MODIFY COLUMN `app_user_id` bigint NULL DEFAULT NULL COMMENT ''绑定的小程序用户ID'' AFTER `del_flag`', 'SELECT 1' ); PREPARE fix_comment_stmt FROM @fix_comment_sql; EXECUTE fix_comment_stmt; DEALLOCATE PREPARE fix_comment_stmt; -- ========== 直接 DDL 小节(Mycat 下如上面 PREPARE 报错,可按序手工执行以下三条) ========== -- ALTER TABLE `charging_pile_account`.`t_vin_management` -- CHANGE COLUMN `appp_user_id` `app_user_id` bigint NULL DEFAULT NULL COMMENT '绑定的小程序用户ID' AFTER `del_flag`; -- ALTER TABLE `charging_pile_account`.`t_vin_management` -- ADD INDEX `idx_app_user_id` (`app_user_id`);