mysql转换表的存储引擎方法

若是转换表的存储引擎,将会丢失原存储引擎的全部特性。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

相关文章
相关标签/搜索