1

同様の構造を共有するさまざまなテーブルをどのように維持しますか。

例: 20 のフィールドを持つ 600 のテーブルがあり、この構造を何ヶ月も使用しています。1 つのフィールドを削除して 2 つの新しいフィールドを追加する必要があるとしたら、構造を含むマスター テーブルを変更するだけでそれを行うことができますか?他のすべての複製されたテーブルで使用する必要がありますか?

4

1 に答える 1

0

おそらく、あなたの構造は最適とはほど遠いものであり、最善の解決策はそれを再編成することであることをご存知でしょう。ただし、レガシー システムでは必ずしも容易ではないため、MySQL のみでタスクを実行できます。

ストアド プロシージャ内でのみ使用できる「カーソル」が必要になるため、最初にストアド プロシージャを作成し (サンプル コードは以下に示します)、次に is 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 に答える