回滚代码
This commit is contained in:
@@ -0,0 +1,191 @@
|
||||
-- Restore schema to pre-prc_order (code rollback).
|
||||
-- Run on database bms. Safe to re-run.
|
||||
--
|
||||
-- DATA: prc_order_ext was TRUNCATE before the FK.
|
||||
-- Those ext rows are gone. This script only restores table shape.
|
||||
-- Row data needs a backup / binlog from before that TRUNCATE.
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SELECT DATABASE() AS current_db;
|
||||
|
||||
-- 1) Drop FK from ext -> prc_order (table may still be prc_order_ext)
|
||||
SET @fk := (
|
||||
SELECT CONSTRAINT_NAME FROM information_schema.TABLE_CONSTRAINTS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'prc_order_ext'
|
||||
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
|
||||
AND CONSTRAINT_NAME = 'fk_order_ext_order'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@fk IS NOT NULL,
|
||||
'ALTER TABLE prc_order_ext DROP FOREIGN KEY fk_order_ext_order',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 2) Rename prc_order_ext -> prc_order_bill_ext
|
||||
SET @new_tbl := (
|
||||
SELECT TABLE_NAME FROM information_schema.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prc_order_ext' LIMIT 1
|
||||
);
|
||||
SET @old_tbl := (
|
||||
SELECT TABLE_NAME FROM information_schema.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prc_order_bill_ext' LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@new_tbl IS NOT NULL AND @old_tbl IS NULL,
|
||||
'RENAME TABLE prc_order_ext TO prc_order_bill_ext',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 3) PK column order_id -> bill_id
|
||||
SET @col := (
|
||||
SELECT COLUMN_NAME FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'prc_order_bill_ext'
|
||||
AND COLUMN_NAME = 'order_id'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@col IS NOT NULL,
|
||||
'ALTER TABLE prc_order_bill_ext CHANGE COLUMN order_id bill_id varchar(36) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT \'计费订单ID,对应 prc_order_bill.bill_id\'',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 4) Put back columns that were moved off the ext table
|
||||
SET @col := (
|
||||
SELECT COLUMN_NAME FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'prc_order_bill_ext'
|
||||
AND COLUMN_NAME = 'product_floor_code'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@col IS NULL,
|
||||
'ALTER TABLE prc_order_bill_ext ADD COLUMN product_floor_code text NULL COMMENT \'渠道编码\'',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @col := (
|
||||
SELECT COLUMN_NAME FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'prc_order_bill_ext'
|
||||
AND COLUMN_NAME = 'order_status'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@col IS NULL,
|
||||
'ALTER TABLE prc_order_bill_ext ADD COLUMN order_status tinyint(4) DEFAULT NULL COMMENT \'订单状态\'',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @col := (
|
||||
SELECT COLUMN_NAME FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'prc_order_bill_ext'
|
||||
AND COLUMN_NAME = 'pickup_date'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@col IS NULL,
|
||||
'ALTER TABLE prc_order_bill_ext ADD COLUMN pickup_date datetime DEFAULT NULL COMMENT \'收件时间\'',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @col := (
|
||||
SELECT COLUMN_NAME FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'prc_order_bill_ext'
|
||||
AND COLUMN_NAME = 'bl_pickup'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@col IS NULL,
|
||||
'ALTER TABLE prc_order_bill_ext ADD COLUMN bl_pickup tinyint(4) DEFAULT NULL COMMENT \'是否收件 0未收件 1已收件\'',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @col := (
|
||||
SELECT COLUMN_NAME FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'prc_order_bill_ext'
|
||||
AND COLUMN_NAME = 'dimensional_weight_factor'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@col IS NULL,
|
||||
'ALTER TABLE prc_order_bill_ext ADD COLUMN dimensional_weight_factor decimal(10,3) DEFAULT NULL COMMENT \'计费重\'',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
|
||||
-- 5) Drop orphan ext rows, then restore FK to prc_order_bill
|
||||
DELETE e FROM prc_order_bill_ext e
|
||||
LEFT JOIN prc_order_bill b ON b.bill_id = e.bill_id
|
||||
WHERE b.bill_id IS NULL;
|
||||
|
||||
SET @fk := (
|
||||
SELECT CONSTRAINT_NAME FROM information_schema.TABLE_CONSTRAINTS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'prc_order_bill_ext'
|
||||
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
|
||||
AND CONSTRAINT_NAME = 'fk_order_bill_ext_bill'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@fk IS NULL,
|
||||
'ALTER TABLE prc_order_bill_ext ADD CONSTRAINT fk_order_bill_ext_bill FOREIGN KEY (bill_id) REFERENCES prc_order_bill (bill_id) ON DELETE CASCADE',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
ALTER TABLE prc_order_bill_ext COMMENT = '订单计费扩展表';
|
||||
|
||||
-- 6) Drop prc_order_bill.order_id (and its index)
|
||||
SET @idx := (
|
||||
SELECT INDEX_NAME FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'prc_order_bill'
|
||||
AND INDEX_NAME = 'idx_order_bill_order_id'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@idx IS NOT NULL,
|
||||
'ALTER TABLE prc_order_bill DROP INDEX idx_order_bill_order_id',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @col := (
|
||||
SELECT COLUMN_NAME FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'prc_order_bill'
|
||||
AND COLUMN_NAME = 'order_id'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@col IS NOT NULL,
|
||||
'ALTER TABLE prc_order_bill DROP COLUMN order_id',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 7) Drop prc_order_bill.pickup_date added in the rolled-back change
|
||||
-- Receive time stays on prc_order_bill_ext.pickup_date
|
||||
SET @idx := (
|
||||
SELECT INDEX_NAME FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'prc_order_bill'
|
||||
AND INDEX_NAME = 'idx_order_bill_pickup_date'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@idx IS NOT NULL,
|
||||
'ALTER TABLE prc_order_bill DROP INDEX idx_order_bill_pickup_date',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @col := (
|
||||
SELECT COLUMN_NAME FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'prc_order_bill'
|
||||
AND COLUMN_NAME = 'pickup_date'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@col IS NOT NULL,
|
||||
'ALTER TABLE prc_order_bill DROP COLUMN pickup_date',
|
||||
'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 8) Drop new master table
|
||||
SET @tbl := (
|
||||
SELECT TABLE_NAME FROM information_schema.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'prc_order' LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@tbl IS NOT NULL, 'DROP TABLE prc_order', 'SELECT 1');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
Reference in New Issue
Block a user