2012-04-23 143 views
31

我試圖在MySQL Workbench中保存大約1,000,000條記錄的查詢結果。在MySQL Workbench中導出查詢結果超過1000條記錄

當我運行SELECT,只有1000條記錄顯示出來(MySQL工作臺的默認限制)。我知道我可以更改限制或刪除限制,但我不希望將1,000,000條記錄加載到結果面板(這可能會導致我的計算機崩潰?),但我確實希望將結果保存到文件中。

是否MySQL工作臺讓你查詢的結果直接保存到一個文件?或者保存整個結果集而不是1000?

+1

我還可以寫一個PHP腳本,它的查詢,並且輸出到CSV,但可能會崩潰,我的服務器過了吧?如果你fopen()追加,一個巨大的文件會有問題嗎? – 2012-04-23 21:41:34

+0

我對工作臺並不熟悉,但是您可以編寫一個腳本,一次只獲得1000條記錄,每次只需正確設置偏移量(即第一次「限制0,1000」,第二次「限制1000,1000」然後是「LIMIT 2000,1000」等),每次將結果附加到文件中。無需將全部百萬條記錄保存在內存中,也不需要將它們全部寫入文件。 – 2012-04-23 21:46:06

+0

另一個複雜因素是查詢本身必須引用其他記錄。它執行一個SUM()並在記錄被允許存在於結果集中之前用HAVING檢查SUM。所以我需要首先處理整個數據集,然後輸出它。 – 2012-04-23 22:30:31

回答

30

,能夠改變查詢結果行限制,或完全刪除的極限。

  1. 轉到編輯→首→ SQL編輯器(標籤)。如果您找不到查詢結果,請轉至SQL查詢(選項卡)

  2. 找到查詢結果部分,取消勾選限行複選框

  3. 點擊OK

  4. 重新運行查詢。

+15

*「我試圖保存約1,000,000條記錄的查詢結果」*在這種情況下,我認爲取消限制是正確的行爲。 – vbence 2013-04-16 13:40:30

+7

在MySQL Workbench 5.2中,他們將* Limit Rows *選項從'SQL Editor'移動到'SQL Queries'選項卡。 – 2014-01-16 22:08:25

+1

在Ubuntu Linux上的MySQL Workbench 6.3上編輯'>'Preferences'>'SQL Editor'>'SQL Execution' – tenCupMaximum 2017-01-20 19:26:42

37

LOAD DATA INFILE有一個叫做SELECT ... INTO OUTFILE的兄弟姐妹。您可以使用它:

SELECT * FROM mytable 
INTO OUTFILE '/tmp/mytable.csv' 
FIELDS TERMINATED BY ',' 
    OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n'; 

此方法不會在UI中使用不必要的資源。

由於@florian指出:它將,然而,在數據庫服務器上創建輸出文件,而不是在客戶機上。

還要注意的是安全框架,如SELinux的AppArmor的可能會阻止MySQL的從寫標準數據庫以外的文件夾。如果您遇到權限被拒絕錯誤,即使該目錄可由mysql用戶寫入,它可能是其中之一。

+0

如果權限問題,我用這個選項去https://dev.mysql.com/doc/refman/5.5 /en/cannot-create.html – vsingh 2015-12-30 20:19:08

2

只需添加'limit $ number'追加SQL子句即可。 如果不加限制,默認返回線是1000

+0

這並不回答 – Bowdzone 2015-04-28 09:52:31

+1

適用於我的問題,將限制添加到大數字,然後返回所有行,並且可以導出它們。 – dweebo 2016-01-08 14:20:44

相關問題