-- 应收账单来源ID字段命名迁移 -- -- 将历史字段名迁移为与当前来源表一致的名称: -- ar_bill_detail.prc_bill_id -> prc_order_bill_id -- ar_bill_detail_fee.prc_fee_id -> prc_income_bill_fee_id -- 脚本可重复执行,已完成迁移的字段和索引会自动跳过。 SET NAMES utf8mb4; SET @db_name := DATABASE(); -- 1. 应收账单订单明细:来源计费订单ID。 SET @has_old_detail_column := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'ar_bill_detail' AND COLUMN_NAME = 'prc_bill_id' ); SET @has_new_detail_column := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'ar_bill_detail' AND COLUMN_NAME = 'prc_order_bill_id' ); SET @sql := IF(@has_old_detail_column > 0 AND @has_new_detail_column = 0, 'ALTER TABLE ar_bill_detail CHANGE COLUMN prc_bill_id prc_order_bill_id VARCHAR(36) NOT NULL COMMENT ''来源计费订单ID,对应 prc_order_bill.bill_id''', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- 2. 应收账单费用明细:来源收入费用ID。 SET @has_old_fee_column := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'ar_bill_detail_fee' AND COLUMN_NAME = 'prc_fee_id' ); SET @has_new_fee_column := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'ar_bill_detail_fee' AND COLUMN_NAME = 'prc_income_bill_fee_id' ); SET @sql := IF(@has_old_fee_column > 0 AND @has_new_fee_column = 0, 'ALTER TABLE ar_bill_detail_fee CHANGE COLUMN prc_fee_id prc_income_bill_fee_id VARCHAR(36) NOT NULL COMMENT ''来源收入费用ID,对应 prc_income_bill_fee.fee_id''', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- 3. 费用明细索引同步改名,避免数据库中继续保留旧字段命名。 SET @has_old_fee_unique := ( SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'ar_bill_detail_fee' AND INDEX_NAME = 'uk_ar_detail_prc_fee' ); SET @has_new_fee_unique := ( SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'ar_bill_detail_fee' AND INDEX_NAME = 'uk_ar_detail_prc_income_fee' ); SET @sql := IF(@has_old_fee_unique > 0 AND @has_new_fee_unique = 0, 'ALTER TABLE ar_bill_detail_fee RENAME INDEX uk_ar_detail_prc_fee TO uk_ar_detail_prc_income_fee', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @has_old_fee_index := ( SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'ar_bill_detail_fee' AND INDEX_NAME = 'idx_ar_detail_prc_fee' ); SET @has_new_fee_index := ( SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = @db_name AND TABLE_NAME = 'ar_bill_detail_fee' AND INDEX_NAME = 'idx_ar_detail_prc_income_fee' ); SET @sql := IF(@has_old_fee_index > 0 AND @has_new_fee_index = 0, 'ALTER TABLE ar_bill_detail_fee RENAME INDEX idx_ar_detail_prc_fee TO idx_ar_detail_prc_income_fee', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;