欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL之修改數(shù)據(jù)表存儲引擎的三種方式

 更新時間:2023年11月21日 10:27:23   作者:Matrixchan  
這篇文章主要介紹了MySQL之修改數(shù)據(jù)表存儲引擎的三種方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

第一種方法

ALTER TABLE

將表從一個引擎修改為另一個引擎最簡單的辦法是使用ALTER TABLE語句,轉(zhuǎn)換表的存儲引擎會導(dǎo)致失去原引擎相關(guān)的所有特性。

例:

將mytable的引擎修改為InnoDB

mysql> ALTER TABLE mytable ENGINE = InnoDB;

上述方法適用任何的存儲引擎,但執(zhí)行時間較長。

MySQL會按行將數(shù)據(jù)從原表復(fù)制到一張新表中,在復(fù)制過程中會消耗系統(tǒng)所有的I/O能力,同時會對原表加上讀鎖。

如果在繁忙的表上執(zhí)行此操作需要特別小心。

第二種方法

導(dǎo)出和導(dǎo)入數(shù)據(jù)

使用mysqldump工具將數(shù)據(jù)導(dǎo)出到文件,然后修改文件中CREATE TABLE語句的存儲引擎選項和表名,同時注意mysqldump默認(rèn)會自動加上CREATE TABLE語句前加上DROPTABLE語句,若忽略此點可能會導(dǎo)致數(shù)據(jù)丟失。

第三種方法

創(chuàng)建與查詢(CREATE 和 SELECT)

此方法綜合了上述兩種方法的高效和安全,不需要導(dǎo)出整個表,而是先創(chuàng)建一個新的存儲引擎的表,然后利用 INSERT … SELECT語法導(dǎo)入數(shù)據(jù)。

mysql > CREATE TABLE innodb_table LIKE myisam_table;
mysql > ALTER TABLE innodb_table ENGINE=InnoDB;
mysql > INSERT INTO innodb_table SELECT * FROM myisam_table;

如果數(shù)據(jù)量大,可考慮分批處理,針對每一段數(shù)據(jù)執(zhí)行事務(wù)提交操作,以免大事務(wù)產(chǎn)生過多的undo。

假設(shè)有主鍵字段id,可重復(fù)運行以下語句將數(shù)據(jù)導(dǎo)入新表:

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

以上操作完成后,新表是原表的一個全量復(fù)制,原表不受任何影響。如果有必要,可以在執(zhí)行中對原表加鎖,確保新表與原表的數(shù)據(jù)一致。

persona Toolkit提供了一個pt-online-schema-change的工具,可以簡單方便地執(zhí)行上述的過程,避免手工操作可能導(dǎo)致的失誤。

總結(jié)

好了,這些僅為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論