2015-11-25 102 views
0

這裏是我的查詢:如何遍歷結果集並執行每條語句? (MySQL的)

SELECT CONCAT('ALTER TABLE `', TABLE_NAME,'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') AS mySQL 
FROM INFORMATION_SCHEMA.TABLES; 

我想改變每個VARCHAR和表從整個數據庫的字符集和校對,但結果從這組僅僅是巨大的。我如何迭代這個查詢並在SQL語言中執行每個結果?

+2

編寫一個存儲過程並執行語句作爲準備語句。 –

回答

2

如果我這樣做,我會將此SELECT語句的輸出保存到文件類型爲.sql的文件中。

然後我會用文本編輯器編輯.sql文件,以確保它包含我所希望的。

然後我會使用MySQL客戶端程序來運行SQL文件。

注意事項well查詢中寫入的SQL數據定義語言命令不起作用。您的查詢爲系統中的每個表寫入命令。您可能想要爲一個數據庫中的表執行此操作。

SELECT CONCAT('ALTER TABLE `', 
       TABLE_SCHEMA, 
       '``', 
       TABLE_NAME, 
       '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') 
        AS mySQL 
    FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = DATABASE() 
    AND TABLE_SCHEMA NOT IN ('INFORMATION_SCHEMA', 'PERFORMANCE_SCHEMA', 'MYSQL') 

此查詢使用數據庫名稱限定表名。它也只選擇當前數據庫中的表格。最後,它排除了三個系統數據庫,因爲嘗試更改這些數據庫中的表是一個非常糟糕的主意。