Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将MyISAM转换为InnoDB数据库_Mysql_Sql_Database_Innodb_Myisam - Fatal编程技术网

Mysql 将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";

我试图用以下语句将整个数据库从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";
当我得到一个每个表都被改变的结果时,例如:

ALTER TABLE database.action ENGINE=InnoDB;
当我检查表引擎时,它们仍然是MyISAM。奇怪的是如果我单独运行命令

ALTER TABLE action ENGINE='InnoDB';
那张桌子很好用


关于如何对整个数据库进行转换的任何提示?

您正在运行的SELECT语句只生成字符串;它生成的字符串没有作为SQL语句执行。您需要从该查询中获取结果集,然后作为单独的步骤实际执行这些语句。

我通常只是在文本编辑器中标记并运行它。尝试用纯SQL来做这件事是一种挫折感。你说得对,我在5分钟后发现了同样的事情。谢谢你的回复!只是澄清一下,没有办法在一个命令中运行它们,对吗?就像Linux中的管道一样?@geolykos:不,没有办法在一条SQL语句中运行它们。查询中resultset中的每一行都需要作为语句执行。对于一次性快照,只需将结果集保存为文本文件。您可以编写一个小应用程序,甚至是一个MySQL存储程序(过程),以循环遍历resultset,并为返回的每一行执行单独的语句。