MySQL改變表的存儲引擎
MySQL提供了多種數據庫存儲引擎,存儲引擎負責MySQL數據庫中的數據的存儲和提取。不同的存儲引擎具有不同的特性,有時可能需要將一個已經存在的表的存儲引擎轉換成另外的一個存儲引擎,有很多方法可以完成這種轉換,每一種方法都會有優缺點,應當根據實際情況去選擇,下面講述三種轉換MySQL表引擎的方法:
ALTER TABLE
轉換MySQL表引擎最簡單的方法是直接使用ALTER TABLE去修改表的定義。下面的這條語句將mytable表引擎轉換成InnoDB
mysql>ALTER TABLE mytable ENGINE = InnoDB;
優點:簡單、可以使用於任何的表引擎。
缺點:需要執行很長時間,轉換的過程是先定義一個新的引擎表,然後把原表中的數據復制過來。在復制的過程中會消耗系統大量的I/O能力,同時還會在原表上加上讀鎖。所以,在一個非常繁忙的系統中使用這種轉換方式是行不通的,縱然這很簡單。
另外,需要注意的是,如果使用這種方式轉換表引擎會失去和原表引擎相關的特性。例如,將一張InnoDB表轉換成MyISAM表,然後再轉換成InnoDB表,縱然你什麼都沒有做,但是原表中的外鍵將會消失。
導入和導出
為了更好的控制轉換的過程,可以是使用mysqldump工具將數據導出到文件,然後修改文件中的CREATE TABLE語句的ENGINE選項,注意修改表名,因為一個數據庫中不可能有兩個同名的表,即時它們使用不同的存儲引擎。
SHELL>
mysqldump -u 用戶名 -p 數據庫名 表名 > 文件名
vi修改文件中的CREATE TABLE語句
mysql> source 帶路徑文件名
創建與查詢
第三種方式結合了第一種高效和第二種方式安全。不需要導出整個表的數據,而是先創建一個新的存儲引擎表,然後利用INSERT....SELECT語法來到數據。
mysql>
CREATE TABLE innodb_table LIKE myisam_table ;
mysql>
ALTER TABLE innodb_table ENGINE = InnoDB ;
mysql>
INSERT INTO innodb_table SELECT * FROM myisam_table;