您的位置:首页 > 数据库 > MySQL

Mysql 转换表的引擎

2015-08-24 13:18 609 查看
下面接受三种Mysql 数据库将表的存储引擎转换成另外一种引擎。每种方法都有优缺点。

ALTER TABLE

将表的一个引擎修改为另个引擎最简单的办法就是是用alter table 语句,下面是修改user 表的储存引擎;

mysql> alter table user engine=InnoDB;
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> show table status like 'user' \G;


上述语法可以适合任何储存引擎。但是有一个问题:需要执行很长时间。Mysql会按行讲源数据复制到另一新表当中,在复制期间可能会消耗系统所有的I/O能力,同时原表会加上锁。所以在繁忙的表上执行此操作要下心。

如果转换表的存储引擎将会丢失和原引擎相关的所有特性。如,将一张InnoDB表转换为MyISAM,然后转换InnoDB,原InnoDB上的所有外键将会丢失。

导入和导出

为了更好的控制转换过程,可是使用mysqldump 工具将数据导入文件中,然后修改文件中的create table 语句中的存储引擎选项,mysqldump 工具默认会在create table 中加上drop 语句。

创建和查询

第三种装换技术综合了第一种的高效和第二种方法的中的安全,不需要导出真个表的数据。而是先创建一个新的存储引擎的表。然后利用 Insert 。。。。select 语句来导出,

mysql> create table myInnoDB like user;
Query OK, 0 rows affected (0.04 sec)

mysql> alter table myInnoDB engine=innodb;
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> insert into myInnoDB select * from user;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql