我没有设置我的数据库并注意到我的一些表是 innoDB 而其他的是 MyISAM。我之所以对更改它们感兴趣是因为Jurg van Vliet(他在 AWS 上撰写 O'Reilly 书籍)说Amazon RDS 的自动数据库备份能力取决于所有表都是 innoDB 表。
将数据库中的所有表转换为 InnoDB 的命令是什么?
我没有设置我的数据库并注意到我的一些表是 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();