puzhibing
60 分钟以前 6dead3d8451b1b231d77b653a7fca84406159371
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
-- 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`);