【问题标题】:MYSQL query Alter table engine only if engine not innodbMYSQL 查询仅在引擎不是 innodb 时才更改表引擎
【发布时间】:2017-06-29 13:38:09
【问题描述】:

仅当当前引擎不是 INNODB 时,我想运行一个更改表引擎的查询 (ALTER TABLE table1ENGINE = INNODB)。

我该怎么做?

更新: 我遇到了一个查询尝试更改表的引擎的案例,而它已经是 innodb。

【问题讨论】:

    标签: mysql if-statement innodb alter


    【解决方案1】:

    你可以使用

    ALTER TABLE t ENGINE = InnoDB;
    

    您可以使用此查询。如果 db engine 已经 InnoDB 那么什么都不会发生。 输出将是

    MySQL returned an empty result set (i.e. zero rows)
    

    如果引擎不在 InnoDB 中,那么它将转换为 InnoDB。

    【讨论】:

      【解决方案2】:

      如果表已经在InnoDB 上,则该命令无效。

      可以从information_schema查询表引擎:

      SELECT `ENGINE` from `information_schema`.`TABLES`
      WHERE `TABLE_SCHEMA`='my_schema' AND `TABLE_NAME`='table1';
      

      【讨论】:

        【解决方案3】:

        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命令行工具中。

        【讨论】:

          猜你喜欢
          • 2014-02-26
          • 2013-04-25
          • 2013-07-10
          • 1970-01-01
          • 1970-01-01
          • 2023-03-30
          • 2012-10-02
          • 1970-01-01
          • 2011-05-13
          相关资源
          最近更新 更多