[英]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.