如何将 MyISAM 中的所有表转换为 InnoDB?

新手上路,请多包涵

我知道我可以单独发出一个更改表来将表存储从 MyISAM 更改为 InnoDB。

我想知道是否有一种方法可以快速将它们全部更改为 InnoDB?

原文由 Pentium10 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 406
2 个回答
<?php
    // connect your database here first
    //

    // Actual code starts here

    $sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_SCHEMA = 'your_database_name'
        AND ENGINE = 'MyISAM'";

    $rs = mysql_query($sql);

    while($row = mysql_fetch_array($rs))
    {
        $tbl = $row[0];
        $sql = "ALTER TABLE `$tbl` ENGINE=INNODB";
        mysql_query($sql);
    }
?>

原文由 Gajendra Bang 发布,翻译遵循 CC BY-SA 4.0 许可协议

当表很大时,最好从控制台进行

转换为innodb.sh

 #!/usr/bin/env bash

# Usage: ./convert-to-innodb.sh 'db' 'user' 'password' | mysql 'db' -u  user -p password

set -eu

db="$1"
user="$2"
pass="$3"

sql="SET @DATABASE_NAME = '${db}';"

sql+="SELECT  CONCAT('ALTER TABLE \`', table_name, '\` ENGINE=InnoDB;') AS sql_statements
FROM    information_schema.tables AS tb
WHERE   table_schema = @DATABASE_NAME
AND     \`ENGINE\` = 'MyISAM'
AND     \`TABLE_TYPE\` = 'BASE TABLE'
ORDER BY table_name DESC;"

echo $sql | mysql -u${user} -p${pass} | tail -n +2

原文由 Antony Gibbs 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题