限制mysqldump中的记录数?

限制mysqldump中的记录数?,mysqldump,Mysqldump,我正在尝试将一个大数据库中的小样本记录加载到测试数据库中 你如何告诉mysqldump只给你800万条记录中的n条 感谢可以给mysqldump一个要执行的SQL查询,它将从中获取转储的数据。然后,您可以在查询中使用“limit X”子句来限制行数。正如skaffman所说,使用--where选项: mysqldump --opt --where="1 limit 1000000" database 当然,这将为您提供每个表中的前一百万行。如果您想从特定表中获取n记录,您可以执行以下操作: m

我正在尝试将一个大数据库中的小样本记录加载到测试数据库中

你如何告诉mysqldump只给你800万条记录中的n条


感谢

可以给mysqldump一个要执行的SQL查询,它将从中获取转储的数据。然后,您可以在查询中使用“limit X”子句来限制行数。

正如skaffman所说,使用--where选项:

mysqldump --opt --where="1 limit 1000000" database

当然,这将为您提供每个表中的前一百万行。

如果您想从特定表中获取
n
记录,您可以执行以下操作:

mysqldump --opt --where="1 limit 1000000" database table > dump.sql

这将把名为
table
的表中的第一行
1000000
转储到文件
dump.sql

中,因为默认顺序是ASC,这在这种情况下很少是您想要的,所以您需要有一个适当的数据库设计来使DESC开箱即用。如果所有表都有一个同名的主键列(自然或代理),则可以使用以下方法轻松转储n条最新记录:

mysqldump --opt --where="1 ORDER BY id DESC limit 1000000" --all-databases > dump.sql

这就是为什么您应该始终命名您的PK id并避免组合PK的完美原因,即使在关联表中也是如此(使用代理键)。

限制前的“1”是做什么的?@Phob:where选项基本上附加到形式为
SELECT*from table where
,,因此,在本例中,您将从表中获得
选择*,其中1限制1000000
。如果没有1,您将有一个无效的查询。为where子句指定1(因为1总是真的)只会选择所有记录。哇,真是个骇客。所以你基本上可以用这种方式进行SQL注入。这会保持所有外键的完整性吗?如果没有,有没有办法呢?谢谢!此外,您还可以使用:
mysqldump--opt--where=“1 limit 1000000 offset 1000000”--no create info database
获取第二页的100万条记录。请确保在页面上使用--no create info标志,而不是第一个标志,以便只转储数据,而不使用create table。这样做(命名id并避免复合PK),您将需要忽略关系数据库理论。实际上,如果您按照关系数据库的最佳实践设计数据库,根据数据和实体定义PK,您可以使用--option--where=“1 LIMIT 10000”作为示例。如果没有OrderBy,这将起作用,因为MySQL将以自然的方式进行排序,这相当于说它将遵循PK的索引顺序。然后,所有相关表的FK将只有其引用表中存在的数据,因为顺序是相同的。拥有像PK一样的ID和没有PK是一样的。您的完整性受到了影响,因为在大多数情况下,自动递增的数字与实体数据没有任何关系。@mpoletto--where=“1 LIMIT 10000”将只拾取第一个10000个条目。我回答的全部要点是展示如何获得最新的X条目,这通常是您想要的。我也不明白命名约定与“忽略关系数据库理论”有什么关系,我想你误解了我的答案。最流行的ORM,如EF、Django ORM等。默认为PK列指定并建议使用“id”,因为说users.user_id而不仅仅是users.id是多余的。如果您的id列命名不一致,但是表中定义的第一个逻辑列,您也可以
按1 DESC排序。真的吗?如何向mysqldump提供查询?我在文档中找不到它。