若是转换表的存储引擎,将会丢失原存储引擎的全部特性。mysql
例如:若是将innodb转换成myisam,再转回innodb,原innodb表的的外键将丢失。sql
假设默认存储引擎是MyISAM转为InnoDBcode
第一种:使用ALTER TABLE实现事务
mysql>ALTER TABLE table_name ENGINE=InnoDB;
适合任何存储引擎间的转换。须要执行很长时间。按行从数据将原表复制到一个新表,特别消耗系统I/O能力,而且原表会加上读锁。繁忙的表上慎用。it
第二种:mysqldump导出与导入实现io
mysql>mysqldump -uroot -p db_name tb_name > db_tb_name.sql;
修改db_tb_name.sql文件内engine为InnoDB和表名。注意去掉sql文件中的DROP TABLE命令,以避免删除原表。innodb
[root@localhost ~]#mysql -uroot -p db_name < db_tb_name.sql
第三种:建立与查询实现table
mysql>create table db_innodb like db_myisam; mysql>alter table db_innodb engine=innodb; mysql>insert into db_innodb select * from db_myisam;
若是数据量很大能够再insert的时候分批导入,结合事务以下:class
mysql>start transaction; mysql>insert into db_innodb select * from db_myisam where id>0 limit 1000; mysql>insert into db_innodb select * from db_myisam where id>1000 limit 1000; mysql>insert into db_innodb select * from db_myisam where id>2000 limit 1000; mysql>commit;
x表示起始id值。修改x值并重复执行以上语句便可。select