-- ============================================ -- 数据库迁移脚本:移除 device_status,迁移到 pla_account -- 执行时间:2025-01-XX -- 说明: -- 1. 为 pla_account 表添加 device_id 字段 -- 2. 删除 device_status 表(如果存在) -- 3. 创建 account_config 表(账号配置表) -- ============================================ -- ============================================ -- 1. 为 pla_account 表添加 device_id 字段 -- ============================================ SET @exist_device_id = ( SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pla_account' AND COLUMN_NAME = 'device_id' ); SET @sql_device_id = IF(@exist_device_id = 0, 'ALTER TABLE `pla_account` ADD COLUMN `device_id` VARCHAR(200) NULL DEFAULT '''' COMMENT ''设备ID'' AFTER `sn_code`', 'SELECT ''字段 device_id 已存在,跳过添加'' AS message' ); PREPARE stmt FROM @sql_device_id; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- ============================================ -- 2. 创建 account_config 表(如果不存在) -- ============================================ CREATE TABLE IF NOT EXISTS `account_config` ( `account_id` INT NOT NULL COMMENT '账号ID(关联 pla_account.id)', `platform_type` VARCHAR(50) NOT NULL DEFAULT 'boss' COMMENT '平台类型(boss- Boss直聘, liepin- 猎聘)', `platform_config` JSON NULL COMMENT '平台相关配置(JSON对象)', `auto_deliver_config` JSON NULL COMMENT '自动投递配置(JSON对象)', `auto_chat_config` JSON NULL COMMENT '自动沟通配置(JSON对象)', `auto_active_config` JSON NULL COMMENT '自动活跃配置(JSON对象)', `notes` TEXT NULL DEFAULT '' COMMENT '备注', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`account_id`), INDEX `idx_platform_type` (`platform_type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='账号配置表'; -- 如果 MySQL 版本低于 5.7,不支持 JSON 类型,可以使用以下 SQL(将 JSON 改为 TEXT): /* CREATE TABLE IF NOT EXISTS `account_config` ( `account_id` INT NOT NULL COMMENT '账号ID(关联 pla_account.id)', `platform_type` VARCHAR(50) NOT NULL DEFAULT 'boss' COMMENT '平台类型(boss- Boss直聘, liepin- 猎聘)', `platform_config` TEXT NULL COMMENT '平台相关配置(JSON对象)', `auto_deliver_config` TEXT NULL COMMENT '自动投递配置(JSON对象)', `auto_chat_config` TEXT NULL COMMENT '自动沟通配置(JSON对象)', `auto_active_config` TEXT NULL COMMENT '自动活跃配置(JSON对象)', `notes` TEXT NULL DEFAULT '' COMMENT '备注', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`account_id`), INDEX `idx_platform_type` (`platform_type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='账号配置表'; */ -- ============================================ -- 3. 可选:迁移 device_status 中的 device_id 到 pla_account -- ============================================ -- 注意:此步骤只在 device_status 表存在且有数据时执行 -- 如果 device_status 表已不存在,可以跳过此步骤 -- 检查 device_status 表是否存在 SET @table_exists = ( SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'device_status' ); -- 如果 device_status 表存在,尝试迁移 device_id 数据 -- 注意:此迁移假设 device_status 使用 sn_code 作为主键,pla_account 也有 sn_code 字段 -- 如果结构不同,请手动调整迁移 SQL /* SET @sql_migrate_device_id = IF(@table_exists > 0, 'UPDATE `pla_account` pa INNER JOIN `device_status` ds ON pa.sn_code = ds.sn_code SET pa.device_id = ds.device_id WHERE pa.device_id IS NULL OR pa.device_id = '''' AND ds.device_id IS NOT NULL AND ds.device_id != ''''', 'SELECT ''device_status 表不存在,跳过数据迁移'' AS message' ); PREPARE stmt FROM @sql_migrate_device_id; EXECUTE stmt; DEALLOCATE PREPARE stmt; */ -- ============================================ -- 4. 删除 device_status 表(谨慎操作!) -- ============================================ -- ⚠️ 警告:删除表会丢失所有数据,请确保已经备份或迁移了需要的数据 -- 如果确定要删除 device_status 表,请取消下面 SQL 的注释 -- DROP TABLE IF EXISTS `device_status`; -- 如果不想直接删除,可以重命名表作为备份: -- RENAME TABLE `device_status` TO `device_status_backup_202501XX`; -- ============================================ -- 注意事项 -- ============================================ -- 1. 执行前请先备份数据库 -- 2. device_id 字段允许为 NULL,旧数据可能没有 device_id -- 3. account_config 表使用 account_id 作为主键,关联 pla_account.id -- 4. 如果 MySQL 版本低于 5.7,请使用 TEXT 类型替代 JSON 类型 -- 5. device_status 表的删除操作是可选的,建议先重命名备份 -- 6. 如果 device_status 表不存在,相关的 SQL 会自动跳过 -- ============================================ -- 验证执行结果 -- ============================================ -- 执行以下 SQL 验证迁移结果: -- 1. 检查 pla_account 表的 device_id 字段 -- DESCRIBE pla_account; -- 2. 检查 account_config 表是否创建成功 -- DESCRIBE account_config; -- 3. 检查 device_status 表是否还存在(如果已删除,此查询会报错) -- SELECT COUNT(*) FROM device_status; -- 4. 查看已迁移 device_id 的账号数量 -- SELECT COUNT(*) FROM pla_account WHERE device_id IS NOT NULL AND device_id != '';