You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

152 lines
4.8 KiB

USE `data_center_aeon_admin`;
1 month ago
DROP procedure IF EXISTS `add_column`;
DELIMITER $$
CREATE PROCEDURE add_column()
BEGIN
IF NOT EXISTS (
SELECT *
FROM information_schema.columns
WHERE table_schema = 'data_center_aeon_admin'
1 month ago
AND table_name = 'basic_monitoring_asset'
AND column_name = 'class_big_id'
) THEN
ALTER TABLE basic_monitoring_asset
ADD COLUMN `class_big_id` bigint DEFAULT NULL AFTER `class_big`;
END IF;
IF NOT EXISTS (
SELECT *
FROM information_schema.columns
WHERE table_schema = 'data_center_aeon_admin'
1 month ago
AND table_name = 'basic_monitoring_asset'
AND column_name = 'class_medium_id'
) THEN
ALTER TABLE basic_monitoring_asset
ADD COLUMN `class_medium_id` bigint DEFAULT NULL AFTER `class_medium`;
END IF;
IF NOT EXISTS (
SELECT *
FROM information_schema.columns
WHERE table_schema = 'data_center_aeon_admin'
1 month ago
AND table_name = 'basic_monitoring_asset'
AND column_name = 'class_small_id'
) THEN
ALTER TABLE basic_monitoring_asset
ADD COLUMN `class_small_id` bigint DEFAULT NULL AFTER `class_small`;
END IF;
END$$
DELIMITER ;
CALL add_column();
DROP procedure IF EXISTS `add_column`;
CREATE TABLE IF NOT EXISTS `basic_asset_class_big` (
`id` bigint NOT NULL AUTO_INCREMENT,
`company_id` bigint DEFAULT NULL,
`class_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`create_time` bigint DEFAULT NULL,
`flag` int DEFAULT '0' COMMENT '0-正常,1-删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
CREATE TABLE IF NOT EXISTS `basic_asset_class_medium` (
`id` bigint NOT NULL AUTO_INCREMENT,
`company_id` bigint DEFAULT NULL,
`class_big_id` bigint DEFAULT NULL,
`class_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`create_time` bigint DEFAULT NULL,
`flag` int DEFAULT '0' COMMENT '0-正常,1-删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
CREATE TABLE IF NOT EXISTS `basic_asset_class_small` (
`id` bigint NOT NULL AUTO_INCREMENT,
`company_id` bigint DEFAULT NULL,
`class_medium_id` bigint DEFAULT NULL,
`class_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`create_time` bigint DEFAULT NULL,
`flag` int DEFAULT '0' COMMENT '0-正常,1-删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
-- 插入class_big到basic_asset_class_big
INSERT INTO basic_asset_class_big (company_id, class_name)
SELECT DISTINCT company_id, class_big
FROM basic_monitoring_asset WHERE class_big != '' AND class_big IS NOT NULL
ON DUPLICATE KEY UPDATE class_name=VALUES(class_name); -- 如果已存在则跳过
-- 更新basic_monitoring_asset的class_big_id
UPDATE basic_monitoring_asset bma
JOIN basic_asset_class_big bacb
ON bma.company_id = bacb.company_id AND bma.class_big = bacb.class_name
SET bma.class_big_id = bacb.id;
-- 插入class_medium到basic_asset_class_medium
INSERT INTO basic_asset_class_medium (company_id, class_big_id, class_name)
SELECT DISTINCT bma.company_id, bacb.id, bma.class_medium
FROM basic_monitoring_asset bma
JOIN basic_asset_class_big bacb
ON bma.company_id = bacb.company_id AND bma.class_big = bacb.class_name
WHERE bma.class_medium != '' AND bma.class_medium IS NOT NULL
ON DUPLICATE KEY UPDATE class_name=VALUES(class_name); -- 如果已存在则跳过
-- 更新basic_monitoring_asset的class_medium_id
UPDATE basic_monitoring_asset bma
JOIN basic_asset_class_medium bacm
ON bma.company_id = bacm.company_id AND bma.class_medium = bacm.class_name
SET bma.class_medium_id = bacm.id;
-- 更新basic_asset_class_medium的class_big_id
UPDATE basic_asset_class_medium bacm
INNER JOIN basic_monitoring_asset bma ON bma.class_medium_id = bacm.id AND bma.company_id = bacm.company_id
SET bacm.class_big_id = bma.class_big_id;
-- 插入class_small到basic_asset_class_small
INSERT INTO basic_asset_class_small (company_id, class_medium_id, class_name)
SELECT DISTINCT bma.company_id, bacm.id, bma.class_small
FROM basic_monitoring_asset bma
JOIN basic_asset_class_medium bacm
ON bma.company_id = bacm.company_id AND bma.class_medium = bacm.class_name
WHERE bma.class_small != '' AND bma.class_small IS NOT NULL
ON DUPLICATE KEY UPDATE class_name=VALUES(class_name); -- 如果已存在则跳过
-- 更新basic_monitoring_asset的class_small_id
UPDATE basic_monitoring_asset bma
JOIN basic_asset_class_small bacs
ON bma.company_id = bacs.company_id AND bma.class_small = bacs.class_name
SET bma.class_small_id = bacs.id;
-- 更新basic_asset_class_small的class_medium_id
UPDATE basic_asset_class_small bacs
INNER JOIN basic_monitoring_asset bma ON bma.class_small_id = bacs.id AND bma.company_id = bacs.company_id
SET bacs.class_medium_id = bma.class_medium_id;