-- 将时间字段从TIMESTAMP改为INT(存储Unix时间戳秒数) -- 此脚本会将现有的datetime/timestamp数据转换为Unix时间戳(秒) USE `auto_trade_sys`; -- 步骤1:添加新的INT类型字段(临时字段) ALTER TABLE `trades` ADD COLUMN `entry_time_ts` INT UNSIGNED NULL COMMENT '入场时间(Unix时间戳秒数)' AFTER `entry_time`, ADD COLUMN `exit_time_ts` INT UNSIGNED NULL COMMENT '平仓时间(Unix时间戳秒数)' AFTER `exit_time`, ADD COLUMN `created_at_ts` INT UNSIGNED NULL COMMENT '创建时间(Unix时间戳秒数)' AFTER `created_at`; -- 步骤2:将现有数据转换为Unix时间戳(秒) -- 注意:假设现有数据是北京时间(UTC+8),转换为UTC时间戳 UPDATE `trades` SET `entry_time_ts` = UNIX_TIMESTAMP(`entry_time`) WHERE `entry_time` IS NOT NULL; UPDATE `trades` SET `exit_time_ts` = UNIX_TIMESTAMP(`exit_time`) WHERE `exit_time` IS NOT NULL; UPDATE `trades` SET `created_at_ts` = UNIX_TIMESTAMP(`created_at`) WHERE `created_at` IS NOT NULL; -- 步骤3:删除旧的时间字段 ALTER TABLE `trades` DROP COLUMN `entry_time`, DROP COLUMN `exit_time`, DROP COLUMN `created_at`; -- 步骤4:重命名新字段 ALTER TABLE `trades` CHANGE COLUMN `entry_time_ts` `entry_time` INT UNSIGNED NOT NULL COMMENT '入场时间(Unix时间戳秒数)', CHANGE COLUMN `exit_time_ts` `exit_time` INT UNSIGNED NULL COMMENT '平仓时间(Unix时间戳秒数)', CHANGE COLUMN `created_at_ts` `created_at` INT UNSIGNED NOT NULL DEFAULT (UNIX_TIMESTAMP()) COMMENT '创建时间(Unix时间戳秒数)'; -- 步骤5:更新索引 DROP INDEX IF EXISTS `idx_entry_time` ON `trades`; CREATE INDEX `idx_entry_time` ON `trades` (`entry_time`); -- 验证:查看转换后的数据 SELECT id, symbol, entry_time, FROM_UNIXTIME(entry_time) as entry_time_display, exit_time, FROM_UNIXTIME(exit_time) as exit_time_display, created_at, FROM_UNIXTIME(created_at) as created_at_display FROM `trades` ORDER BY id DESC LIMIT 10;