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

MySQL 批量修改表引擎為 InnoDB 的高效 SQL 技巧

     編輯:MySQL 綜合教學

核心 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';

操作步驟

  1. 將 SQL 中的 your_database_name 替換為目標資料庫名
  2. 執行上述查詢,獲得類似 ALTER TABLE `t1` ENGINE=InnoDB; ALTER TABLE `t2` ENGINE=InnoDB; ... 的結果文本
  3. 複製結果,去除首尾引號,在客戶端執行

進階版:帶事務與進度反饋


-- 生成帶事務的腳本 (適用於 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';
-- 應無記錄返回
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved