【问题标题】:Exporting query results in MySQL Workbench beyond 1000 records在 MySQL Workbench 中导出超过 1000 条记录的查询结果
【发布时间】:2012-05-04 13:07:39
【问题描述】:

我正在尝试在 MySQL Workbench 中保存大约 1,000,000 条记录的查询结果。

当我运行 SELECT 时,只显示 1000 条记录(MySQL Workbench 的默认限制)。我知道我可以更改限制或删除限制,但我不希望将 1,000,000 条记录加载到结果面板中(这可能会使我的计算机崩溃?),但我确实想将结果保存到文件中。

MySQL Workbench 是否允许您将查询结果直接保存到文件中?还是保存整个结果集而不是 1,000 个?

【问题讨论】:

  • 我还可以编写一个 PHP 脚本来执行查询并输出到 CSV,但这也可能使我的服务器崩溃,对吧?如果你fopen()来追加,大文件会不会有问题?
  • 我不熟悉工作台,但是您可以编写一个脚本来一次只获取 1000 条记录,只需每次正确设置偏移量(即第一次LIMIT 0,1000,第二次LIMIT 1000,1000 ,然后LIMIT 2000,1000,等等...),每次都将结果附加到文件中。无需将整百万条记录保存在内存中,也无需尝试将它们一次全部写入文件。
  • 另一个复杂的问题是查询本身必须引用其他记录。它执行 SUM() 并在允许记录进入结果集中之前使用 HAVING 检查 SUM。所以我确实需要先处理整个数据集,然后输出。
  • 您可以像现在一样处理整个数据集,并且仍然应用 LIMIT 来获取和输出结果。 LIMIT 不会以任何方式影响结果,它只是限制返回给您的结果集。
  • 如果您创建一个包含选择结果的表,那么您可以使用任何标准工具或命令将结果传输到文件——甚至是您客户端上的文件工作站。有关详细信息,请参阅下面的答案。 [抱歉,我尽量不宣传自己的答案,但现有答案中缺少这种开箱即用的想法。]

标签: mysql mysql-workbench


【解决方案1】:

可以更改查询结果的行限制,或完全取消限制。

  1. 转到 编辑 → 首选项 → SQL 编辑器(选项卡)。如果您找不到 查询结果,请转至 SQL 查询(选项卡)

  2. 找到 Query Results 部分并取消选中 Limit Rows 复选框

  3. 点击确定

  4. 重新运行您的查询。

【讨论】:

  • “我正在尝试保存大约 1,000,000 条记录的查询结果” 在这种情况下,我认为取消限制不是正确的做法。跨度>
  • 在 MySQL Workbench 5.2 中,他们将 Limit Rows 选项从 SQL Editor 移至 SQL Queries 选项卡。
  • Edit>Preferences>SQL Editor>SQL Execution 在 Ubuntu Linux 上的 MySQL Workbench 6.3 上
  • 这行不通。该框未选中,但 2001 行的结果集在导出时仍限制为 814。
  • 实际上这对我来说效果很好,对于 17,000 条记录没有任何问题。正如答案所暗示的那样,我只是取消了“限制行”框,然后我可以一次将它们全部导出到一个文件中,并且所有 17,000 条记录都在我的文件中。
【解决方案2】:

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 指出的那样:但是,它将在数据库服务器上创建输出文件,而不是在客户端计算机上。

另请注意,SELinuxAppArmor 等安全框架可能会阻止 MySQL 在标准 databases 文件夹之外写入文件。如果您遇到 permission denied 错误,即使该目录可由 mysql 用户写入,它也可能是其中之一。

【讨论】:

【解决方案3】:

只需添加 'limit $number' 附加 SQL 子句。 如果不加限制,默认返回1000行。

【讨论】:

  • 这并不能回答任何问题
  • 为我工作,将限制添加到一个大数字,然后返回所有行,您可以导出它们。
  • 这个答案与问题完全无关。
  • 这是一个完全相关的答案:调用 LIMIT 将覆盖 MySQL Workbench 的设置。
  • 这对我有用,谢谢。
【解决方案4】:

MySql 中有一个选项可以导出所有记录。命名查询结果操作。

【讨论】:

  • 这看起来不像是从 MySQL 工作台截取的屏幕截图
猜你喜欢
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 2014-02-09
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多