【发布时间】:2017-06-29 13:38:09
【问题描述】:
仅当当前引擎不是 INNODB 时,我想运行一个更改表引擎的查询 (ALTER TABLE table1ENGINE = INNODB)。
我该怎么做?
更新: 我遇到了一个查询尝试更改表的引擎的案例,而它已经是 innodb。
【问题讨论】:
标签: mysql if-statement innodb alter
仅当当前引擎不是 INNODB 时,我想运行一个更改表引擎的查询 (ALTER TABLE table1ENGINE = INNODB)。
我该怎么做?
更新: 我遇到了一个查询尝试更改表的引擎的案例,而它已经是 innodb。
【问题讨论】:
标签: mysql if-statement innodb alter
你可以使用
ALTER TABLE t ENGINE = InnoDB;
您可以使用此查询。如果 db engine 已经 InnoDB 那么什么都不会发生。 输出将是
MySQL returned an empty result set (i.e. zero rows)
如果引擎不在 InnoDB 中,那么它将转换为 InnoDB。
【讨论】:
如果表已经在InnoDB 上,则该命令无效。
可以从information_schema查询表引擎:
SELECT `ENGINE` from `information_schema`.`TABLES`
WHERE `TABLE_SCHEMA`='my_schema' AND `TABLE_NAME`='table1';
【讨论】:
http://mysql.rjweb.org/doc.php/myisam2innodb#generating_alters 提供了一些关于从 MyISAM 转换为 InnoDB 的提示,包括:
生成所有 ALTER 以将所有 MyISAM 表转换为 InnoDB:
SELECT CONCAT('USE ', table_schema, '; ALTER TABLE ', table_name, ' ENGINE=InnoDB;')
FROM information_schema.tables
WHERE engine = 'MyISAM'
AND table_schema NOT IN ('mysql', 'information_schema', 'performance_schema');
然后将输出复制并粘贴到mysql命令行工具中。
【讨论】: