修改产品功能

This commit is contained in:
wuweihua
2026-09-28 21:43:39 +08:00
parent b247bc2fd2
commit 0ad90f6183
32 changed files with 339 additions and 660 deletions
@@ -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;