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

MySQL 資料匯入匯出全攻略:mysqlimport、LOAD DATA、mysqldump 與 SELECT INTO OUTFILE

     編輯:MySQL 資料庫相關知識

一、 mysqlimport:高效的文字檔匯入工具

基本語法

mysqlimport [options] db_name textfile1 [textfile2 ...]
  • 文字檔名稱(第一個點號前)對應資料表名,如 Customers.txt → Customers 表。
  • 檔案格式必須與表結構完全一致,否則報錯。

常用選項

選項功能
-d, --delete匯入前清空資料表
-f, --force遇錯繼續執行
-i, --ignore跳過唯一鍵衝突的行
-l, --lock-tables匯入前鎖表,防止併發干擾
-r, --replace唯一鍵衝突時以新資料覆蓋
--fields-terminated-by=,指定欄位分隔符(預設 Tab)
--fields-enclosed-by=\"指定欄位包裹字元(如雙引號)
--lines-terminated-by=\n指定行結束符

範例:匯入 CSV 檔

# 檔案內容:"1","ORD89876","1 Dozen Roses","19991226"
mysqlimport --fields-terminated-by=, --fields-enclosed-by=\" --lock-tables --replace -p Meet_A_Geek Orders.txt

二、 批次模式:從 SQL 檔案匯入

# New_Data.sql 內含 USE、INSERT 等語句,每句以分號結尾
mysql -p < /home/mark/New_Data.sql
  • 適合結構與資料同時遷移、版本控管 SQL 檔案。
  • 可利用現有資料庫的 General/Update Log 直接作為匯入腳本。

三、 LOAD DATA INFILE:SQL 層面的彈性匯入

優勢

  • 可在 mysql 客戶端、應用程式(JDBC、PHP 等)中直接執行。
  • 支援 LOCAL 關鍵字:從客戶端本機讀取檔案上傳至遠端 Server,無需 FTP。
  • 支援 REPLACE/IGNORE 處理重複鍵。
  • 關鍵特性:可指定匯入欄位順序,解決來源檔案欄位與目標表不一致的問題。

語法範例

-- 基本用法
LOAD DATA INFILE '/home/mark/data.sql' INTO TABLE Orders;

-- 本地檔案上傳至遠端
LOAD DATA LOCAL INFILE 'C:/MyDoc/SQL.txt' INTO TABLE Orders;

-- 低優先級、覆蓋重複鍵、指定格式
LOAD DATA LOW_PRIORITY INFILE '/home/mark/Orders.txt' REPLACE
INTO TABLE Orders
FIELDS TERMINATED BY ',' ENCLOSED BY '\"';

-- 指定欄位對應(來源欄位少於目標表)
LOAD DATA INFILE '/home/Order.txt' INTO TABLE Orders
(Order_Number, Order_Date, Customer_ID);

四、 資料匯出方法

1. mysqldump:最通用的邏輯備份工具

# 完整備份單庫
mysqldump --opt db_name > backup.sql

# 僅備份特定表
mysqldump --opt db_name table1 table2 > tables.sql

# 條件導出(WHERE 子句)
mysqldump --opt --where="Order_ID > 2000" db_name Orders > special.sql

# 直接跨主機遷移(管道串流)
mysqldump --opt db_name | mysql --host=remote_host -C db_name

核心優化參數

參數效果
--opt綜合優化(quick、extended-insert、lock-tables 等),最快導出導入
--quick不緩衝結果集,逐行寫入,防止大表 OOM
--extended-insert多行 INSERT,大幅減小檔案
--single-transactionInnoDB 熱備份必備,無需鎖表
--compress跨網路傳輸時壓縮
--tab=path產生 .sql (DDL) + .txt (DATA) 兩檔,適合大量資料並行載入

2. SELECT INTO OUTFILE:SQL 導出,支援複雜查詢與報表

SELECT * INTO OUTFILE '/home/mark/Orders.txt'
FIELDS TERMINATED BY ',' 
FROM Orders
WHERE Order_Date >= '2000-01-01';
  • 本質是將 SELECT 結果導向檔案,支援 JOIN、GROUP BY 等複雜邏輯。
  • 可結合批次模式產生動態報表:先 INSERT 測試資料,再 SELECT INTO OUTFILE 導出結果。

五、 實戰建議速查表

場景推薦工具/語法關鍵參數
大量 CSV 匯入既有表mysqlimport / LOAD DATA--fields-terminated-by=, --lock-tables --replace
跨版本/異構遷移mysqldump --compatible=mysql323--default-character-set 雙端一致
線上熱備份 (InnoDB)mysqldump --single-transaction --opt--flush-logs 建立恢復點
應用程式動態匯出報表SELECT INTO OUTFILE支援 JOIN、WHERE、欄位指定
遠端 Server 匯入本地大檔LOAD DATA LOCAL INFILE無需 FTP,客戶端直傳
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved