MySQL 轉換/修改表格儲存體引擎 詳細介紹,mysql引擎

來源:互聯網
上載者:User

MySQL 轉換/修改表格儲存體引擎 詳細介紹,mysql引擎

MySQL錶轉換(轉換/修改表格儲存體引擎):

有幾種方法可以吧表從一種引擎轉移到另外一種引擎上,都有自己的優缺點。下面介紹3種常用的方法。


一:ALTER TABLE

把表從一種引擎轉移到另外一種引擎最簡單快捷的方法用ALTER TABLE語句:

mysql>ALTER TABLE mytablename ENGINE = 引擎類型

詳細介紹該用法:這種文法適合所有的儲存引擎,不過這裡有一個“陷阱”:這種轉換過程會消耗大量時間。MySQL為此要執行一箇舊表到新表的逐行複製(Row-By-Row Copy)。在這期間,轉換操作可能會佔用伺服器得所有I/O處理能力,並且在轉換時,源表要被加讀鎖。因此,在一個繁忙的表上做此操作,要加以注意。作為替代手斷,可以使用下面這個方法,它會先做個表拷貝。

如果從一個引擎到另一種引擎做錶轉換,所有屬於原始引擎的專用特性都會丟失,例如,如果將一個innoDB錶轉換成MyISAM表,在轉回來,那麼最初定義在原InnoDB表上的所有外鍵都會丟失。


二:轉儲(Dump) 和匯入(Import)

如果想對錶轉換的過程做更多控制,可以選擇使用mysqldump工具,將表先轉儲(dump)成一個文字檔,在編輯轉儲檔案(dump file),修改其中的CREATE TABLE語句。一定要注意修改表名和引擎類型,因為即便引擎類型有所不同,統一資料庫種也不允許存在同一表名的兩張表。另外,mysqldump在CREATE TABLE語句前,會預設地加上drop table 命令,如果不注意,可能因此丟失原有資料。


三:CREATE 和 SELECT

這種方法轉換,在第一種方法的速度與第二種方法的安全性之間做了一個平衡。它不是轉儲整張表,或者一次性轉換所有的資料,而是建立一個新表,使用MySQL的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;

如果資料資料量大,這種辦法效果不錯。但是更高效的辦法是增量地填充表,在填充每個增量資料區塊的時候都提交事務,這樣就不會導致撤銷日誌(Undo Log)變得過於龐大。假定id是主鍵,可以重複運行下列查詢(每次逐次增大x和y的值),直至所有的資料都複製到新表。

mysql>START TRANSACTION;

mysql>INSERT INTO innodb_table SELECT * FROM myisam_table WHERE id BETWEEN x AND y;

mysql>COMMIT;

轉移操作完成後,源表仍會保留,可以在操作完成後刪除(drop)它,而此時,新表已經被填充完畢。注意:如有必要,請在轉換時加鎖源表,防止轉移複製資料不一致的問題

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.