-- ============================================================ -- 远程库时间字段规范化迁移 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`;