若是轉換表的存儲引擎,將會丟失原存儲引擎的全部特性。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