修改产品功能
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
-- Rename product tables (drop bms_ prefix) and remove base price version
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- 1) Drop FK from country -> product if present
|
||||
SET @fk := (
|
||||
SELECT CONSTRAINT_NAME FROM information_schema.TABLE_CONSTRAINTS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'bms_product_country'
|
||||
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
|
||||
AND CONSTRAINT_NAME = 'fk_product_country_pid'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@fk IS NULL, 'SELECT 1', CONCAT('ALTER TABLE bms_product_country DROP FOREIGN KEY ', @fk));
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 2) Drop version index / column on country
|
||||
SET @idx := (
|
||||
SELECT INDEX_NAME FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'bms_product_country'
|
||||
AND INDEX_NAME = 'idx_product_country_ppv'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@idx IS NULL, 'SELECT 1', 'ALTER TABLE bms_product_country DROP INDEX idx_product_country_ppv');
|
||||
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 = 'bms_product_country'
|
||||
AND COLUMN_NAME = 'ppv_id'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@col IS NULL, 'SELECT 1', 'ALTER TABLE bms_product_country DROP COLUMN ppv_id');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- Also handle already-renamed country table
|
||||
SET @idx := (
|
||||
SELECT INDEX_NAME FROM information_schema.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'product_country'
|
||||
AND INDEX_NAME = 'idx_product_country_ppv'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@idx IS NULL, 'SELECT 1', 'ALTER TABLE product_country DROP INDEX idx_product_country_ppv');
|
||||
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 = 'product_country'
|
||||
AND COLUMN_NAME = 'ppv_id'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@col IS NULL, 'SELECT 1', 'ALTER TABLE product_country DROP COLUMN ppv_id');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 3) Drop version table
|
||||
DROP TABLE IF EXISTS bms_product_price_version;
|
||||
DROP TABLE IF EXISTS product_price_version;
|
||||
|
||||
-- 4) Rename tables (skip if already renamed)
|
||||
SET @t := (
|
||||
SELECT TABLE_NAME FROM information_schema.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'bms_product' LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@t IS NULL, 'SELECT 1', 'RENAME TABLE bms_product TO product');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @t := (
|
||||
SELECT TABLE_NAME FROM information_schema.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'bms_product_country' LIMIT 1
|
||||
);
|
||||
SET @sql := IF(@t IS NULL, 'SELECT 1', 'RENAME TABLE bms_product_country TO product_country');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 5) Recreate FK product_country.product_id -> product.product_id
|
||||
SET @fk := (
|
||||
SELECT CONSTRAINT_NAME FROM information_schema.TABLE_CONSTRAINTS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'product_country'
|
||||
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
|
||||
AND CONSTRAINT_NAME = 'fk_product_country_pid'
|
||||
LIMIT 1
|
||||
);
|
||||
SET @sql := IF(
|
||||
@fk IS NOT NULL,
|
||||
'SELECT 1',
|
||||
'ALTER TABLE product_country ADD CONSTRAINT fk_product_country_pid FOREIGN KEY (product_id) REFERENCES product (product_id) ON DELETE CASCADE'
|
||||
);
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
Reference in New Issue
Block a user