76 lines
3.2 KiB
SQL
76 lines
3.2 KiB
SQL
-- ============================================================
|
||
-- 远程库时间字段规范化迁移 SQL
|
||
-- 作用:把曾由错误代码(createTime='create_time')写入的
|
||
-- 旧列 create_time / update_time / delete_time
|
||
-- 重命名为规范列 create_at / update_at / delete_at,
|
||
-- 并修正列类型/默认值/注释,与 install.sql 保持一致。
|
||
-- 覆盖表(前缀示例 wxapp_,执行前全部替换为线上真实前缀):
|
||
-- card, help, medal, member_medal, prop, score_log,
|
||
-- shop, sms, task, member_prop, member_task, notice
|
||
-- 说明:
|
||
-- 1) 旧列若不存在(线上已是新列名),自动跳过,不报错。
|
||
-- 2) 新列若已存在(说明之前已改过),CHANGE 会失败——故先 DROP 旧列再 ADD 新列,
|
||
-- 但为安全采用「先探测旧列是否存在」的方式。
|
||
-- 3) 本脚本幂等:重复执行安全(旧列不存在时整段跳过)。
|
||
-- ============================================================
|
||
|
||
DELIMITER //
|
||
|
||
-- 通用迁移存储过程:仅当旧列存在且新列不存在时才改
|
||
DROP PROCEDURE IF EXISTS `__migrate_time_col`//
|
||
CREATE PROCEDURE `__migrate_time_col`(
|
||
IN p_table VARCHAR(64),
|
||
IN p_old VARCHAR(64),
|
||
IN p_new VARCHAR(64),
|
||
IN p_def VARCHAR(255)
|
||
)
|
||
BEGIN
|
||
IF EXISTS (
|
||
SELECT 1 FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = DATABASE()
|
||
AND TABLE_NAME = p_table
|
||
AND COLUMN_NAME = p_old
|
||
) AND NOT EXISTS (
|
||
SELECT 1 FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = DATABASE()
|
||
AND TABLE_NAME = p_table
|
||
AND COLUMN_NAME = p_new
|
||
) THEN
|
||
SET @sql = CONCAT('ALTER TABLE `', p_table, '` CHANGE `', p_old, '` `', p_new, '` ', p_def);
|
||
PREPARE stmt FROM @sql;
|
||
EXECUTE stmt;
|
||
DEALLOCATE PREPARE stmt;
|
||
END IF;
|
||
END//
|
||
|
||
DROP PROCEDURE IF EXISTS `__migrate_table`//
|
||
CREATE PROCEDURE `__migrate_table`(IN p_table VARCHAR(64))
|
||
BEGIN
|
||
-- 三列全改(按各自 install.sql 定义)
|
||
CALL __migrate_time_col(p_table, 'create_time', 'create_at', "int(11) NOT NULL DEFAULT 0 COMMENT '创建时间'");
|
||
CALL __migrate_time_col(p_table, 'update_time', 'update_at', "int(11) NOT NULL DEFAULT 0 COMMENT '更新时间'");
|
||
CALL __migrate_time_col(p_table, 'delete_time', 'delete_at', "int(11) NOT NULL DEFAULT 0 COMMENT '删除时间'");
|
||
END//
|
||
|
||
DELIMITER ;
|
||
|
||
-- 逐表迁移(member_medal / member_prop / member_task 只有 create_at,无 update/delete)
|
||
CALL __migrate_table('wxapp_card');
|
||
CALL __migrate_table('wxapp_help');
|
||
CALL __migrate_table('wxapp_medal');
|
||
CALL __migrate_table('wxapp_prop');
|
||
CALL __migrate_table('wxapp_shop');
|
||
CALL __migrate_table('wxapp_sms');
|
||
CALL __migrate_table('wxapp_task');
|
||
CALL __migrate_table('wxapp_notice');
|
||
CALL __migrate_table('wxapp_score_log');
|
||
|
||
-- 仅含 create_at 的表
|
||
CALL __migrate_time_col('wxapp_member_medal', 'create_time', 'create_at', "int(11) NOT NULL DEFAULT 0 COMMENT '获得时间'");
|
||
CALL __migrate_time_col('wxapp_member_prop', 'create_time', 'create_at', "int(11) NOT NULL DEFAULT '0' COMMENT '获得时间'");
|
||
CALL __migrate_time_col('wxapp_member_task', 'create_time', 'create_at', "int(11) NOT NULL DEFAULT '0' COMMENT '领取时间'");
|
||
|
||
-- 清理临时存储过程
|
||
DROP PROCEDURE IF EXISTS `__migrate_time_col`;
|
||
DROP PROCEDURE IF EXISTS `__migrate_table`;
|