簡體   English   中英

MySQL:InnoDB與MyISAM:如何以及為什么要改變(Amazon RDS)?

[英]MySQL: InnoDB vs. MyISAM: how and why to change (Amazon RDS)?

我沒有設置我的數據庫並注意到我的一些表是innoDB而其他表是MyISAM。 我有興趣改變它們的原因是因為Jurg van Vliet (在AWS上寫O'Reilly書籍) Amazon RDS的自動數據庫備份能力取決於所有表是innoDB表。

將數據庫中的所有表轉換為InnoDB的命令是什么?

這是一個存儲過程,用於將當前數據庫中的所有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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM