2012-04-23 364 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