簡體   English   中英

鏡像mysql表結構

[英]Mirror mysql table structure

有人將如何維護共享相似結構的不同表:

示例:我有600個表,其中包含20個字段,並且我已經使用此結構幾個月了,如果我需要刪除1個字段並添加2個新字段,怎么辦?僅通過更改包含該結構的主表怎么辦?所有其他克隆表都必須使用?

好吧,您可能知道您的結構遠非最佳,最好的解決方案是對其進行重組。 但是,對於舊系統而言,這並不總是那么容易,因此仍只能使用MySQL執行該任務。

您將需要在那里只能在存儲過程內部使用的“游標”,因此您需要首先創建一個存儲過程(其示例代碼在下面),然后以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;

上面的代碼段中可能存在一些較小的語法錯誤,因為我目前無法測試,但是您明白了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM