[英]How to change all tables engines from MYISAM to INNODB in multiple databses?
I know I can issue an alter table individually to change the table storage from MyISAM to InnoDB.我知道我可以单独发出一个更改表来将表存储从 MyISAM 更改为 InnoDB。
I am wondering if there is a way to quickly change all of them to InnoDB?我想知道是否有办法快速将它们全部更改为 InnoDB?
This is one-time task.这是一次性任务。
Use用
SELECT CONCAT(TABLE_SCHEMA, '.', TABLE_NAME) tablename
FROM INFORMATION_SCHEMA.TABLES
WHERE ENGINE = 'MyISAM'
AND TABLE_SCHEMA IN (databases names list);
Get the tables list, build ALTERing script, and execute it manually.获取表列表,构建 ALTERing 脚本,然后手动执行。
This operation in stored procedure form.这个操作以存储过程的形式存在。 NOT TESTED!!!未测试!!!
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.