1

有人将如何维护具有相似结构的不同表:

示例:我有 600 个包含 20 个字段的表,并且我已经使用这个结构几个月了,如果我需要删除 1 个字段并添加 2 个新字段怎么办,如何仅通过更改包含该结构的主表来完成必须由所有其他克隆表使用?

4

1 回答 1

0

好吧,您可能知道您的结构远非最佳,最好的解决方案是重新组织它。但是,使用遗留系统并不总是那么容易,因此仍然可以仅使用 MySQL 执行该任务。

您将需要只能在存储过程中使用的“游标”,因此您需要先创建一个存储过程(其示例代码如下),然后执行 as CALL alter_many_tables();

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;

上面的代码段中可能有一些小的语法错误,因为我目前无法测试,但你明白了。

于 2012-10-16T11:29:44.733 回答