Mysql 将MyISAM转换为InnoDB数据库
我试图用以下语句将整个数据库从MyISAM转换为InnoDB:Mysql 将MyISAM转换为InnoDB数据库,mysql,sql,database,innodb,myisam,Mysql,Sql,Database,Innodb,Myisam,我试图用以下语句将整个数据库从MyISAM转换为InnoDB: use information_schema; SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;') FROM information_schema.tables WHERE engine = "MyISAM" AND table_type = "BASE TABLE" AND table_schema = "database";
use information_schema;
SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;')
FROM information_schema.tables
WHERE engine = "MyISAM" AND table_type = "BASE TABLE" AND table_schema = "database";
当我得到一个每个表都被改变的结果时,例如:
ALTER TABLE database.action ENGINE=InnoDB;
当我检查表引擎时,它们仍然是MyISAM。奇怪的是如果我单独运行命令
ALTER TABLE action ENGINE='InnoDB';
那张桌子很好用
关于如何对整个数据库进行转换的任何提示?您正在运行的SELECT语句只生成字符串;它生成的字符串没有作为SQL语句执行。您需要从该查询中获取结果集,然后作为单独的步骤实际执行这些语句。我通常只是在文本编辑器中标记并运行它。尝试用纯SQL来做这件事是一种挫折感。你说得对,我在5分钟后发现了同样的事情。谢谢你的回复!只是澄清一下,没有办法在一个命令中运行它们,对吗?就像Linux中的管道一样?@geolykos:不,没有办法在一条SQL语句中运行它们。查询中resultset中的每一行都需要作为语句执行。对于一次性快照,只需将结果集保存为文本文件。您可以编写一个小应用程序,甚至是一个MySQL存储程序(过程),以循环遍历resultset,并为返回的每一行执行单独的语句。