Mysqldump

帶有 LIMIT 和 –order-by-primary 的 mysqldump

  • May 13, 2016

我想使用 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語句之後。

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

解決此問題的一種方法是在-where參數中定義順序。如果您知道表的主鍵:

mysqldump -u lelle -p -w"1 = 1 order by <primary key> LIMIT 40" <database> <table>

請注意,這<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 = ...;

然後使用mysqldump中的資訊。

引用自:https://dba.stackexchange.com/questions/138499