首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 資料匯出工具 mysqldump 與 SELECT INTO OUTFILE 深度解析

     編輯:MySQL 資料庫相關知識

為什麼需要資料匯出?

資料匯出主要用於兩大情境:備份資料庫(防止資料遺失)與資料共享(跨系統、跨部門交換資料)。MySQL 提供強大的匯出工具,支援整庫、單表、條件式匯出,並可輸出為 SQL 腳本或純文字格式。

核心工具:mysqldump

mysqldump 位於 mysql/bin/ 目錄,能將資料庫結構(DDL)與資料(INSERT)完整導出為單一文字檔,方便異地還原或遷移。

基本用法

  • 匯出整個資料庫:
    bin/mysqldump –p Meet_A_Geek > MeetAGeek_Dump_File.txt
  • 匯出單一資料表:
    bin/mysqldump –p Meet_A_Geek Orders > MeetAGeek_Orders.txt
  • 條件式匯出(WHERE 子句):
    bin/mysqldump –p –where="Order_ID > 2000" Meet_A_Geek Orders > Special_Dump.txt

常用參數速查表

參數功能說明
--add-drop-table在 CREATE TABLE 前加入 DROP TABLE IF EXISTS,避免還原時衝突
--add-locksINSERT 前後加入 LOCK/UNLOCK TABLE,加速匯入並防併發衝突
-c / --complete-insertINSERT 語句包含欄位名,利於跨資料庫匯入
--delayed-insert使用 INSERT DELAYED,降低對線上服務影響
-F / --flush-logs匯出前刷新 Binlog,利於增量備份
-t / --no-create-info僅匯出資料,不含 DDL
-d / --no-data僅匯出結構,不含資料
--opt啟用最佳化組合(quick、add-drop-table、add-locks、extended-insert、lock-tables)
-q / --quick逐行讀取寫入,不佔用大量記憶體,適合大表
-T / --tab=路徑產生兩個檔:.sql(結構)與 .txt(資料),配合 --fields-terminated-by 等格式化參數
-w / --where指定 WHERE 條件過濾資料

實戰範例:匯出 CSV 供 Excel 使用

bin/mysqldump –p –where "Order_Date >='2000-01-01'"
  –tab=/home/mark –no-create-info –fields-terminated-by=, Meet_A_Geek Orders

此指令將 2000 年後的訂單以逗號分隔輸出,無建表語句,直接可用 Excel 開啟。

另一種選擇:SELECT INTO OUTFILE

此指令在 MySQL 命令列中執行,功能與 LOAD DATA INFILE 互為逆向操作,支援相同的格式化參數,且可結合 JOIN、WHERE 等複雜查詢,彈性極高,甚至可作為簡易報表產生器。

操作步驟

  1. 確認 MySQL 服務運行
  2. 進入 MySQL 命令列:bin/mysql –p Meet_A_Geek
  3. 執行匯出指令:
    SELECT * INTO OUTFILE '/home/mark/Orders.txt'
    FIELDS TERMINATED BY ','
    FROM Orders
    WHERE Order_Date >= '2000-01-01';

進階應用:結合批次處理產生報表

建立 Report_G.rpt 檔:

USE Meet_A_Geek;
INSERT INTO Customers (Customer_ID, Last_Name, First_Name) VALUES (NULL, "Kinnard", "Vicky");
INSERT INTO Customers (Customer_ID, Last_Name, First_Name) VALUES (NULL, "Kinnard", "Steven");
INSERT INTO Customers (Customer_ID, Last_Name, First_Name) VALUES (NULL, "Brown", "Sam");
SELECT Last_Name INTO OUTFILE '/home/mark/Report.rpt' FROM Customers WHERE Customer_ID > 1;

執行:bin/mysql < Report_G.rpt,即可自動寫入新客戶並匯出姓氏報表。

小結

mysqldump 適合完整備份與結構遷移;SELECT INTO OUTFILE 適合自訂查詢、報表產出與格式化匯出。兩者互補,掌握參數細節能大幅提升資料治理效率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved