首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 修改儲存引擎完整指南:MyISAM ↔ InnoDB 切換方法與驗證

     編輯:MySQL 資料庫相關知識

查看當前引擎支援與預設值

SHOW ENGINES;
-- Support 欄位:YES/DEFAULT/NO/DISABLED
-- DEFAULT 表示當前預設引擎

方法一:修改配置檔永久生效

# my.cnf / my.ini
[mysqld]
default-storage-engine=InnoDB

重啟服務生效。新建表將使用 InnoDB,現有表不受影響。

方法二:建表時指定 / 建表後修改

建表指定

CREATE TABLE mytbl (
    id INT PRIMARY KEY,
    name VARCHAR(50)
) ENGINE=MyISAM;  -- 或 ENGINE=InnoDB

注意:舊版本用 TYPE=MyISAM 已棄用,請用 ENGINE=。

建表後修改

ALTER TABLE mytbl2 ENGINE = InnoDB;

執行過程:建立新表 → 複製資料 → 切換 → 刪除舊表。大表耗時長、佔用臨時空間、需獨佔鎖(MDL),建議低峰期或用 pt-online-schema-change。

驗證修改結果

-- 方法 1
SHOW TABLE STATUS FROM db_name WHERE Name='mytbl2';
-- Engine 欄位顯示 InnoDB

-- 方法 2
SHOW CREATE TABLE mytbl2;
-- 末尾顯示 ENGINE=InnoDB

引擎選擇決策表

場景推薦引擎理由
事務處理(轉帳、訂單)InnoDBACID、行鎖、MVCC、外鍵
純讀/讀多寫少、全文搜尋MyISAM壓縮表、全文索引(5.6+ InnoDB 也支援)
高並發寫入InnoDB行鎖並發度遠優於表鎖
崩潰恢複要求高InnoDBRedo/Undo Log 保證持久性
空間資料(GIS)InnoDB / MyISAM5.7+ 皆支援空間索引

遷移注意事項

  • 外鍵:MyISAM 不支援,遷移前必須移除
  • 全文索引:5.6 前僅 MyISAM 支援,遷移需重建
  • 壓縮表:MyISAM myisampack 壓縮表唯讀,InnoDB 須用頁壓縮
  • AUTO_INCREMENT:引擎切換保留值,但 InnoDB 重啟後可能重新計算最大值+1
  • 備份工具:mysqldump --single-transaction 僅適用 InnoDB

小結

查看引擎用 SHOW ENGINES,修改預設改 my.cnf,單表用 ENGINE= 或 ALTER TABLE ... ENGINE=。生產環境大表變更引擎請用 pt-online-schema-change 避免長時間鎖表。InnoDB 為現代應用首選,MyISAM 退居特定只讀/全文場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved