如何维护不同的表,这些表具有相似的结构:
示例:我有600个表,有20个字段,我已经使用这个结构好几个月,如果我需要删除1个字段并添加2个新字段,怎么可能只通过更改主表来完成包含所有其他克隆表必须使用的结构?
答案 0 :(得分:0)
嗯,您可能知道您的结构远非最佳,最佳解决方案是重新组织它。但遗留系统并不总是那么容易,因此任务仍然只能用MySQL执行。
你需要“游标”,它只能在存储过程中使用,所以你需要先创建一个存储过程(它的示例代码在下面),然后执行为CALL alter_many_tables()
; < / p>
CREATE PROCEDURE alter_many_tables()
BEGIN
-- reading names of the table to update in a cursor
DECLARE tables_cursor CURSOR FOR
SELECT DISTINCT
`TABLE_NAME`
FROM
`information_schema`.`columns`
WHERE
`TABLE_NAME` LIKE '%\_modulep'
;
-- condition for the loop over found tables to stop
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- looping
read_loop: LOOP
-- reading table name into a variable
FETCH tables_cursor INTO table_name;
-- check if the loop is over
IF done THEN
LEAVE read_loop;
END IF;
-- forming a table update SQL (modify it as you need)
SET @sql = CONCAT('ALTER TABLE ', @table_name, ' ADD COLUMN `new_column` VARCHAR(45) NULL DEFAULT NULL');
-- executing the SQL we have composed above
PREPARE stmt FROM @sql;
EXECUTE stmt;
END LOOP;
-- closing the cursor
CLOSE table_cursor;
END;
上面的代码段可能有一些小的语法错误,因为我现在无法测试,但你明白了。