📜  mysql 将 innodb 更改为 myisam - SQL (1)

📅  最后修改于: 2023-12-03 15:03:06.460000             🧑  作者: Mango

MySQL 将 InnoDB 更改为 MyISAM

介绍

在 MySQL 中,InnoDB 和 MyISAM 都是常见的存储引擎。InnoDB 适用于高并发的 OLTP(联机事务处理)应用场景,而 MyISAM 适用于读写比例低、对查询性能要求较高的应用场景。

在某些情况下,需要将 InnoDB 更改为 MyISAM,比如某些历史遗留系统中,原本使用 MyISAM 作为存储引擎,但后来升级 MySQL 后默认变更为 InnoDB 等。

下面通过 SQL 脚本方式来演示如何将 InnoDB 更改为 MyISAM。

操作步骤

以下示例以数据库中的表 example_table 为例进行操作。

  1. 查看当前表的存储引擎类型:
SHOW CREATE TABLE example_table;

会输出类似以下内容,其中 ENGINE=InnoDB 表示使用的是 InnoDB 存储引擎:

CREATE TABLE `example_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  1. 如果当前表使用的是 InnoDB 引擎,那么需要先将该表中的数据导出到文件:
SELECT * FROM example_table INTO OUTFILE '/path/to/example_table.txt';
  1. 将表的存储引擎更改为 MyISAM,这里需要同时注意表的字符集、校对规则等信息是否与原表一致:
ALTER TABLE example_table ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  1. 导入之前导出的数据文件到新表中:
LOAD DATA INFILE '/path/to/example_table.txt' INTO TABLE example_table;
  1. 验证新表的存储引擎是否已经变更为 MyISAM:
SHOW CREATE TABLE example_table;

这时输出的结果就应该是:

CREATE TABLE `example_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
注意事项
  • 在进行数据表存储引擎更改前,建议先备份原表数据。
  • 需要注意原表的字符集、校对规则等信息是否与更改后的表一致,以免出现乱码等问题。
  • 如果原表的大小超过了 MyISAM 存储引擎的限制(默认为 4GB),则需要将存储引擎更改为 MyISAM 的同时对表结构进行优化处理,比如使用分表等方式进行拆分。

参考文献:

  1. MySQL InnoDB到MyISAM转换的正确姿势
  2. MySQL切换表存储引擎两种方式