Как изменить все движки таблиц с MYISAM на INNODB в нескольких базах данных? - PullRequest
0 голосов
/ 13 января 2020

Я знаю, что могу по отдельности выдать таблицу изменения, чтобы изменить хранилище таблиц с MyISAM на InnoDB.

Мне интересно, есть ли способ быстро изменить их все на InnoDB?

1 Ответ

1 голос
/ 13 января 2020

Это однократная задача.

Использование

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...