MySQL如何改變表的存儲(chǔ)引擎方式
1.最簡(jiǎn)單的方法是使用alter table語句
例如:
alter table tablename ENGINE = InnoDB;
上述方法可以適用于任何存儲(chǔ)引擎的轉(zhuǎn)換,但有一個(gè)問題,需要執(zhí)行很長(zhǎng)時(shí)間,MySQL會(huì)按行將數(shù)據(jù)從原表復(fù)制到一張新的表中,在復(fù)制期間可能會(huì)消耗系統(tǒng)的所有I/O能力,同時(shí)原表上會(huì)加上鎖,所以,在繁忙的表上執(zhí)行操作要特別小心。
另外,如果轉(zhuǎn)換表的存儲(chǔ)引擎,將會(huì)失去和原引擎相關(guān)的所有特性
例如,將一張InnoDB表轉(zhuǎn)換為MyISAM,然后再轉(zhuǎn)換回InnoDB,原InnoDB表上的所有的外健將丟失。
2.導(dǎo)入導(dǎo)出
為了更好的控制轉(zhuǎn)換的過程,可以使用mysqldump工具將數(shù)據(jù)導(dǎo)出到文件,然后修改文件中create table語句的存儲(chǔ)引擎選項(xiàng),注意同時(shí)修改表名,因?yàn)橥粋€(gè)數(shù)據(jù)庫中不能存在相同的表名,即使它們使用的是不同的存儲(chǔ)引擎。
同時(shí)要注意mysqldump會(huì)默認(rèn)自動(dòng)的在create table 語句前加上drop table語句,不注意這一點(diǎn)可能會(huì)導(dǎo)致數(shù)據(jù)丟失。
3.創(chuàng)建與查詢(create 和 select)
第三種技術(shù)綜合實(shí)現(xiàn)了第一種的高效和第二種的安全,不需要導(dǎo)出整張表的數(shù)據(jù),而是先創(chuàng)建一個(gè)新的存儲(chǔ)引擎的表,然后利用insert 和select 語法來導(dǎo)入數(shù)據(jù)
create table innodb_table like myisam_table; alter table innodb_table engine = InnoDB; insert into innodb_table select * from myisam_table;
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- MySql存儲(chǔ)引擎的作用
- MySQL之存儲(chǔ)引擎使用及說明
- Mysql詳細(xì)剖析數(shù)據(jù)庫中的存儲(chǔ)引擎
- 關(guān)于Mysql的四種存儲(chǔ)引擎
- 關(guān)于MySQL的體系結(jié)構(gòu)及存儲(chǔ)引擎圖解
- MySQL8中的存儲(chǔ)引擎以及文件解析
- MySQL存儲(chǔ)引擎的實(shí)現(xiàn)要素分析
- MySQL之修改數(shù)據(jù)表存儲(chǔ)引擎的三種方式
- MySQL數(shù)據(jù)庫存儲(chǔ)引擎的應(yīng)用
- Mysql中的默認(rèn)存儲(chǔ)引擎
- 一文詳解MySQL 存儲(chǔ)引擎
相關(guān)文章
MySQL報(bào)錯(cuò)ERROR 1045 (28000): Access Denied
這篇文章主要介紹了如何在mac上重置MySQL root密碼的步驟,包括跳過權(quán)限驗(yàn)證進(jìn)入MySQL、更新密碼、恢復(fù)權(quán)限表、檢查用戶權(quán)限和驗(yàn)證MySQL路徑,需要的朋友可以參考下2025-12-12
mysql初始化命令mysqld?--initialize參數(shù)說明小結(jié)
本文主要介紹了mysql初始化命令mysqld?--initialize參數(shù)說明小結(jié),文中通過圖表代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08
MySQL5.7.14下載安裝圖文教程及MySQL數(shù)據(jù)庫語句入門大全
這篇文章主要介紹了MySQL5.7.14下載安裝詳細(xì)教程及MySQL數(shù)據(jù)庫語句入門大全的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
MySQL啟動(dòng)報(bào)錯(cuò):InnoDB表空間丟失的問題排查與解決方案
在MySQL數(shù)據(jù)庫的日常運(yùn)維中,InnoDB表空間丟失是一個(gè)較為常見的問題,本文將深入分析該問題的原因,并提供詳細(xì)的解決方法和預(yù)防措施,希望對(duì)大家有所幫助2025-07-07
MySQL數(shù)據(jù)庫升級(jí)的一些"陷阱"
這篇文章主要介紹了MySQL數(shù)據(jù)庫升級(jí)需要注意的地方,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-08-08
解決mysql 1040錯(cuò)誤Too many connections的方法
因?yàn)槟愕膍ysql安裝目錄下的my.ini中設(shè)定的并發(fā)連接數(shù)太少或者系統(tǒng)繁忙導(dǎo)致連接數(shù)被占滿2012-09-09
MySQL中int?(10)?和?int?(11)?的區(qū)別
這篇文章主要介紹了MySQL中int?(10)?和?int?(11)?的區(qū)別,根據(jù)mysql?中整數(shù)數(shù)據(jù)類型、不同類型的取值范圍、不同數(shù)據(jù)類型的默認(rèn)顯示寬度展開對(duì)int的介紹,需要的朋友可以參考一下2022-01-01

