Files
YwxAppThink/docs/migrations/alter_time_fields_to_at.sql

76 lines
3.2 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================
-- 远程库时间字段规范化迁移 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`;