镜像mysql表结构

时间:2012-08-20 20:26:29

标签: php mysql database

如何维护不同的表,这些表具有相似的结构:

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

1 个答案:

答案 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;

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