簡體   English   中英

如何在多個數據庫中將所有表引擎從 MYISAM 更改為 INNODB?

[英]How to change all tables engines from MYISAM to INNODB in multiple databses?

我知道我可以單獨發出一個更改表來將表存儲從 MyISAM 更改為 InnoDB。

我想知道是否有辦法快速將它們全部更改為 InnoDB?

這是一次性任務。

SELECT CONCAT(TABLE_SCHEMA, '.', TABLE_NAME) tablename 
FROM INFORMATION_SCHEMA.TABLES
WHERE ENGINE = 'MyISAM'
  AND TABLE_SCHEMA IN (databases names list);

獲取表列表,構建 ALTERing 腳本,然后手動執行。


這個操作以存儲過程的形式存在。 未測試!!!

CREATE PROCEDURE alter_engines ()
BEGIN

DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR
    SELECT CONCAT('ALTER TABLE ' , TABLE_SCHEMA, '.', TABLE_NAME, ' ENGINE = InnoDB;') 
    FROM INFORMATION_SCHEMA.TABLES
    WHERE ENGINE = 'MyISAM'
                          /*   do not forget   */
      AND TABLE_SCHEMA IN (databases names list);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur;

alter_loop: LOOP
    FETCH cur INTO @sql;
    IF done THEN
      LEAVE alter_loop;
    END IF;
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END LOOP;

CLOSE cur;

END;

暫無
暫無

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

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