首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL修改表存儲引擎:MyISAM與InnoDB互轉指南

     編輯:MySQL 綜合教學

MySQL修改表存儲引擎:MyISAM與InnoDB互轉指南

在MySQL中,表的存儲引擎決定了事務支持、鎖粒度、索引結構等核心特性。常見場景需在 MyISAM 與 InnoDB 之間切換,本文說明操作方法及兩者關鍵差異。

修改表引擎的SQL語句

-- 轉為 MyISAM
ALTER TABLE 表名 ENGINE = MyISAM;

-- 轉為 InnoDB
ALTER TABLE 表名 ENGINE = InnoDB;

注意: MySQL 5.5+ 推薦使用 ENGINE 關鍵字,舊版本 TYPE 已棄用但仍兼容。

MyISAM 與 InnoDB 核心差異對比

特性MyISAMInnoDB
事務支持不支持支持 (ACID)
鎖粒度表級鎖行級鎖
外鍵約束不支持支持
崩潰恢復需人工修復自動崩潰恢復
全文索引支持 (5.6+ InnoDB也支持)5.6+ 支持
適用場景以 SELECT/INSERT 為主、不需事務、讀密集高併發寫入、事務處理、數據完整性要求高

InnoDB 性能優化關鍵點

  • autocommit 陷阱: 默認 autocommit=ON 導致每條 INSERT/UPDATE 獨立提交,嚴重影響批量寫入性能。
  • 解決: 顯式開啟事務:BEGIN; ... 多條 SQL ... COMMIT;,即使 autocommit 開啟也有效。

如何查看當前表引擎

SHOW TABLE STATUS FROM 數據库名 LIKE '表名';
-- 或
SHOW CREATE TABLE 表名;

修改默認存儲引擎

編輯配置文件 my.cnf(Linux)或 my.ini(Windows):

[mysqld]
default-storage-engine=InnoDB

重啟服務生效。或臨時設置:SET DEFAULT STORAGE ENGINE = InnoDB;(當前會話有效)。

遷移建議

  • 生產環境變更引擎前必須備份,操作會鎖表重建,大表耗時較長。
  • MyISAM 轉 InnoDB 後,需評估主鍵設計(建議自增整數)、索引策略、事務邏輯。
  • InnoDB 表空間文件 (ibdata1, .ibd) 不可直接複製遷移,需用邏輯備份 (mysqldump) 或 xtrabackup。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved