mysqldump 与 LIMIT 和 --order-by-primary

lcj*_*ury 3 mysqldump

我想使用 mysqldump 从数据库中检索 X 第一行(其中“第一”按主键排序)。

我正在尝试通过以下方式使用 mysqldump:

mysqldump [connection-info] -where"1=1 LIMIT 40" --order-by-primary database table >> file.sql

(这是在为不同的表运行不同配置的脚本中)

现在,问题是,该命令创建以下查询:

SELECT /*!40001 SQL_NO_CACHE */ * FROM桌子WHERE 1=1 LIMIT 40 ORDER BY primary_key

是无效查询,我需要LIMIT 40将 放在ORDER BY语句之后。

Len*_*art 5

我的猜测是你不能结合使用限制 --order-by-primary

解决此问题的一种方法是在-where参数中定义顺序。如果您知道表的主键:

mysqldump -u lelle -p -w"1 = 1 order by <primary key> LIMIT 40" <database> <table>
Run Code Online (Sandbox Code Playgroud)

请注意,这<primary key>是主键中列的占位符。

如果您事先不知道主键,您可以使用 INFORMATION_SCHEMA 来确定:

select GROUP_CONCAT(column_name SEPARATOR ',') 
from INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
where CONSTRAINT_NAME = 'PRIMARY' 
  and CONSTRAINT_SCHEMA = ... and table_name = ...;
Run Code Online (Sandbox Code Playgroud)

然后使用mysqldump中的信息。