如果转换表的存储引擎,将会丢失原存储引擎的所有特性。
例如:如果将innodb转换成myisam,再转回innodb,原innodb表的的外键将丢失。
假设默认存储引擎是MyISAM转为InnoDB
第一种:使用ALTER TABLE实现
mysql>ALTER TABLE table_name ENGINE=InnoDB;
适合任何存储引擎间的转换。需要执行很长时间。按行从数据将原表复制到一个新表,特别消耗系统I/O能力,并且原表会加上读锁。繁忙的表上慎用。
第二种:mysqldump导出与导入实现
mysql>mysqldump -uroot -p db_name tb_name > db_tb_name.sql;
修改db_tb_name.sql文件内engine为InnoDB和表名。注意去掉sql文件中的DROP TABLE命令,以免删除原表。
[root@localhost ~]#mysql -uroot -p db_name < db_tb_name.sql
第三种:创建与查询实现
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的时候分批导入,结合事务如下:
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值并重复执行以上语句即可。