標籤:mysql 儲存引擎
MySQL提供了多種資料庫儲存引擎,儲存引擎負責MySQL資料庫中的資料的儲存和提取。不同的儲存引擎具有不同的特性,有時可能需要將一個已經存在的表的儲存引擎轉換成另外的一個儲存引擎,有很多方法可以完成這種轉換,每一種方法都會有優缺點,應當根據實際情況去選擇,下面講述三種轉換MySQL表引擎的方法:
ALTER TABLE轉換MySQL表引擎最簡單的方法是直接使用ALTER TABLE去修改表的定義。下面的這條語句將mytable表引擎轉換成InnoDBmysql>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;
MySQL改變表的儲存引擎