同様の構造を共有するさまざまなテーブルをどのように維持しますか。
例: 20 のフィールドを持つ 600 のテーブルがあり、この構造を何ヶ月も使用しています。1 つのフィールドを削除して 2 つの新しいフィールドを追加する必要があるとしたら、構造を含むマスター テーブルを変更するだけでそれを行うことができますか?他のすべての複製されたテーブルで使用する必要がありますか?
おそらく、あなたの構造は最適とはほど遠いものであり、最善の解決策はそれを再編成することであることをご存知でしょう。ただし、レガシー システムでは必ずしも容易ではないため、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;
現時点ではテストできないため、上記のスニペットには軽微な構文エラーがある可能性がありますが、おわかりいただけると思います。