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

MySQL 資料匯出完全指南:mysqldump 與 SELECT INTO OUTFILE 實戰

     編輯:MySQL 資料庫相關知識

為何需要資料匯出?

資料匯出是資料庫管理的關鍵環節,主要用於兩大場景:備份防災(資料價值高昂,定期備份防範遺失)與資料共享(如書商共享新書資料庫、醫院交換電子病歷)。MySQL 提供多種匯出方式,本文深入解析兩大核心工具:mysqldump 與 SELECT INTO OUTFILE。

一、mysqldump:全能型匯出利器

mysqldump 位於 MySQL/bin/ 目錄,功能強大且靈活:

  • 可將整個資料庫(含結構與資料)轉存為單一 SQL 腳本檔,內含重建資料庫所需的所有 CREATE 與 INSERT 語句。
  • 支援指定單表匯出,甚至透過 WHERE 子句篩選特定記錄。
  • 輸出純文字檔,易於壓縮、傳輸、版本控管,且可直接管線導入其他 MySQL 實例。

基本語法與常用範例

# 匯出整個資料庫
bin/mysqldump -p Meet_A_Geek > MeetAGeek_Dump_File.txt

# 匯出單一資料表
bin/mysqldump -p Meet_A_Geek Orders > MeetAGeek_Orders.txt

# 依條件匯出(訂單編號 > 2000)
bin/mysqldump -p --where="Order_ID > 2000" Meet_A_Geek Orders > Special_Dump.txt

關鍵參數詳解

參數功能
--add-drop-table各表前加 DROP TABLE IF EXISTS,確保重複匯入不報錯
--add-locksINSERT 前後加鎖,防止匯入期間他人操作該表
-c / --complete-insertINSERT 語句包含欄位名,利於跨資料庫遷移
-t / --no-create-info僅匯出資料(無 CREATE TABLE)
-d / --no-data僅匯出結構(無 INSERT)
--opt啟用多項優化,加速匯出與後續匯入(預設開啟)
-q / --quick逐行讀寫,避免大表佔滿記憶體
-T / --tab=path產生兩檔:.sql(結構)+ .txt(資料),適合大量資料載入
--fields-terminated-by=,指定欄位分隔符(如逗號),方便 Excel 開啟

進階實戰:匯出 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 年後的訂單以 CSV 格式輸出至 /home/mark/Orders.txt,無結構定義,直接可導入試算表。

二、SELECT INTO OUTFILE:SQL 內建匯出語句

若需在 SQL 腳本或應用程式中直接匯出,SELECT INTO OUTFILE 是最佳選擇,語法與 LOAD DATA INFILE 對稱,支援幾乎相同的格式化選項。

操作步驟

  1. 確認 mysqld 服務運行:mysqladmin ping(回應 alive 即正常)。
  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';

執行後即生成檔案。優勢在於可結合 JOIN 進行多表關聯查詢匯出,甚至作為簡易報表產生器。

報表產生範例

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,輸出檔將包含所有符合條件的客戶姓氏。

三、Schema(模式)補充說明

Schema:一組以資料定義語言(DDL)表達的語句集,完整描述資料庫結構(含表、索引、約束等)。

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