在MySQL中,表的存儲引擎決定了事務支持、鎖粒度、索引結構等核心特性。常見場景需在 MyISAM 與 InnoDB 之間切換,本文說明操作方法及兩者關鍵差異。
-- 轉為 MyISAM ALTER TABLE 表名 ENGINE = MyISAM; -- 轉為 InnoDB ALTER TABLE 表名 ENGINE = InnoDB;
注意: MySQL 5.5+ 推薦使用 ENGINE 關鍵字,舊版本 TYPE 已棄用但仍兼容。
| 特性 | MyISAM | InnoDB |
|---|---|---|
| 事務支持 | 不支持 | 支持 (ACID) |
| 鎖粒度 | 表級鎖 | 行級鎖 |
| 外鍵約束 | 不支持 | 支持 |
| 崩潰恢復 | 需人工修復 | 自動崩潰恢復 |
| 全文索引 | 支持 (5.6+ InnoDB也支持) | 5.6+ 支持 |
| 適用場景 | 以 SELECT/INSERT 為主、不需事務、讀密集 | 高併發寫入、事務處理、數據完整性要求高 |
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;(當前會話有效)。
ibdata1, .ibd) 不可直接複製遷移,需用邏輯備份 (mysqldump) 或 xtrabackup。