核心 SQL 语句
USE `your_database_name`;
SELECT GROUP_CONCAT(
CONCAT('ALTER TABLE `', TABLE_NAME, '` ENGINE=InnoDB;')
SEPARATOR ' '
)
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_database_name'
AND TABLE_TYPE = 'BASE TABLE';
操作步驟
- 將 SQL 中的
your_database_name 替換為目標資料庫名
- 執行上述查詢,獲得類似
ALTER TABLE `t1` ENGINE=InnoDB; ALTER TABLE `t2` ENGINE=InnoDB; ... 的結果文本
- 複製結果,去除首尾引號,在客戶端執行
進階版:帶事務與進度反饋
-- 生成帶事務的腳本 (適用於 5.6+ 線上 DDL)
SELECT CONCAT(
'START TRANSACTION; ',
GROUP_CONCAT(
CONCAT('ALTER TABLE `', TABLE_NAME, '` ENGINE=InnoDB;')
SEPARATOR ' '
),
' COMMIT;'
)
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_db' AND ENGINE <> 'InnoDB' AND TABLE_TYPE = 'BASE TABLE';
注意事項
- 鎖表風險: MySQL 5.6 前
ALTER TABLE 會鎖表,建議低峰期執行或使用 pt-online-schema-change
- 外鍵約束: 存在外鍵的表需先刪除外鍵再轉換,轉換後重建
- 權限需求: 需要
ALTER 權限
- 備份先行: 操作前務必進行邏輯備份
驗證腳本
SELECT TABLE_NAME, ENGINE
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_db' AND ENGINE <> 'InnoDB';
-- 應無記錄返回