2017-10-12 43 views
0

沒有運行,我需要(不使用來自INFORMATION_SCHEMA TABLE_ROWS) 我試圖從執行的腳本來算表的確切行數在我的DB this postMySQL的 - 存儲過程

SET @tableSchema = 'Db_Warehouse'; 
SET SESSION group_concat_max_len = 10000000; 
SET @rowCounts = (
    SELECT GROUP_CONCAT(CONCAT('SELECT ''',TABLE_NAME,''', COUNT(*) FROM ', TABLE_NAME) SEPARATOR ' union all ') 
    FROM information_schema.tables WHERE table_schema = @tableSchema 
); 
PREPARE statement FROM @rowCounts; 
EXECUTE statement; 

但我不斷收到錯誤代碼1064:

<e>Query: PREPARE statement FROM @rowCounts 

Error Code: 1064 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'table union all SELECT 'COX_ClientSatisfaction', COUNT(*) FROM COX_ClientSatisfa' at line 1 

希望你能指教。

+0

你有一個表,從字面上名爲'table'?你應該修改你的CONCAT()以在標識符周圍加上反勾號。 –

+0

我也有評論,看起來你只是想獲得所有表中的行數。 'SHOW TABLE STATUS'不工作?或者相當於'SELECT TABLE_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES ...'我知道這些只是表格行的*估計值,但它們通常很接近,並且它會比COUNT(*)運行快許多倍每桌。 –

+0

嗨@BillKarwin感謝您的建議 - 我沒有運行SELECT TABLE_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES ...但我需要這個來確定數據遷移是否成功,因爲這是一個估計數字是不同的兩個數據庫的 –

回答

0

以上註釋的摘要:通過使用現有工具mysqldbcompare可以更好地完成克隆數據庫中表格行計數是否相同的任務。

過程中出現錯誤的原因是MySQL reserved wordtable上的語法錯誤。

在設計自動查詢生成器時,最好使用手冊中所述的分隔標識符。

例如,這是寫你的查詢更安全的方式:

SELECT GROUP_CONCAT(
    CONCAT(
    'SELECT ', QUOTE(TABLE_NAME), ', COUNT(*) FROM `', TABLE_NAME, '`') 
    SEPARATOR ' UNION ALL ') 
FROM information_schema.tables WHERE table_schema = @tableSchema