2014-03-31 80 views
1

我想整個數據庫從轉換的MyISAM這種說法InnoDB的:轉換的MyISAM InnoDB的數據庫

use information_schema; 

SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;') 
FROM information_schema.tables 
WHERE engine = "MyISAM" AND table_type = "BASE TABLE" AND table_schema = "database"; 

而我得到的結果,每一個表被改變,例如:

ALTER TABLE database.action ENGINE=InnoDB; 

當我檢查表引擎時,他們仍然是MyISAM。奇怪的是,如果我分別運行命令

ALTER TABLE action ENGINE='InnoDB'; 

它工作正常的表。

有關如何爲整個數據庫進行轉換的任何提示?

+0

我通常只是在文本編輯器中標記並運行它。試圖用純SQL來做是件令人沮喪的事情。 – tadman

回答

1

您正在運行的SELECT語句只會生成字符串;它生成的字符串不會作爲SQL語句執行。您需要從該查詢中獲取結果集,然後實際執行這些語句作爲單獨的步驟。

+0

你是對的我在5分鐘後找到了同樣的東西。感謝您的答覆!只是爲了澄清,沒有辦法在一個命令中全部運行它們嗎?像Linux中的管道? – geolykos

+0

@geolykos:不,在單個SQL語句中無法運行它們。查詢中結果集的每行都需要作爲語句執行。對於一次性拍攝,只需將結果集保存爲文本文件即可。您可以編寫一個小應用程序,甚至是一個MySQL存儲程序(過程),循環遍歷結果集併爲返回的每一行執行單獨的語句。 – spencer7593

相關問題