程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL轉換/修改表存儲引擎詳細介紹

MySQL轉換/修改表存儲引擎詳細介紹

編輯: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)它,而此時,新表已經被填充完畢。注意:如有必要,請在轉換時加鎖源表,防止轉移復制數據不一致的問題

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved