9

データベースを設定していませんが、一部のテーブルがinnoDBであるのに対し、他のテーブルはMyISAMであることに気付きました。私がそれらを変更することに興味がある理由は、Jurg van Vliet(AWSでO'Reillyの本を書いている)、AmazonRDSの自動データベースバックアップ機能はすべてのテーブルがinnoDBテーブルであることにかかっていると言っているからです。

データベース内のすべてのテーブルをInnoDBに変換するコマンドは何ですか?

4

1 に答える 1

11

現在のデータベース内のすべてのMyISAMテーブルをInnoDBに変換するためのストアドプロシージャは次のとおりです。

DROP PROCEDURE IF EXISTS convert_all_tables_to_innodb;

DELIMITER //

CREATE PROCEDURE convert_all_tables_to_innodb()
DETERMINISTIC
MODIFIES SQL DATA
SQL SECURITY INVOKER
COMMENT ''
proc: BEGIN
    DECLARE b_not_found     BOOL DEFAULT FALSE;
    DECLARE v_table_name VARCHAR(255);
    DECLARE cur1 CURSOR FOR
SELECT
table_name
FROM
information_schema.tables
WHERE
table_schema = DATABASE() AND
table_type = 'BASE TABLE' AND
engine = 'MyISAM'
ORDER BY
1;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET b_not_found = TRUE;

    OPEN cur1;

    SET b_not_found = FALSE;

    loop1: LOOP
        FETCH cur1 INTO v_table_name;
        IF b_not_found THEN
            LEAVE loop1;
        END IF;

        SET @sql = CONCAT('ALTER TABLE ', v_table_name, ' ENGINE=InnoDB');

        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DROP PREPARE stmt;
    END LOOP;

    CLOSE cur1;
END;
//

DELIMITER ;

実行するには、次のコマンドを実行するだけです。

CALL convert_all_tables_to_innodb();
于 2012-07-22T19:38:45.290 に答える