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

MySQL 批次處理與 LOAD DATA INFILE 資料匯入完整指南

     編輯:MySQL 資料庫相關知識

什麼是 MySQL 批次處理?

批次處理是一種非互動式執行 MySQL 程式的方式。簡單來說,您將原本在 MySQL 命令列中手動輸入的 SQL 指令,預先寫入一個文字檔案中,再透過重導向方式一次性送入 MySQL 執行。這對於大量資料匯入、自動化腳本或從舊系統遷移資料時特別實用。

建立批次處理 SQL 檔案

首先準備一個純文字檔(例如 New_Data.sql),檔案內容即為您要執行的 SQL 指令,每行結尾務必以分號 ; 結束。範例如下:

USE Meet_A_Geek;
INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, "Block");
INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, "Newton");
INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, "Simmons");

注意: 所有語法必須正確,USE 選擇資料庫,INSERT 插入資料。

執行批次匯入

確認 MySQL 服務(Windows 稱為服務,Linux 稱為進程)已啟動,然後在命令列執行:

bin/mysql –p < /home/mark/New_Data.sql

輸入密碼後,若 SQL 無誤,資料即會匯入資料庫。

使用 LOAD DATA INFILE 從檔案匯入資料

若您已有現成的資料檔(如 CSV、TSV),使用 LOAD DATA INFILE 會比手寫 INSERT 效率高得多。此指令可在 MySQL 命令列或應用程式(透過 API)中直接呼叫。

基本語法

USE Meet_A_Geek;
LOAD DATA INFILE "/home/mark/data.sql" INTO TABLE Orders;

常用參數說明

  • LOCAL:指定檔案位於客戶端本機,MySQL 會自動上傳至伺服器,免去 FTP 傳檔步驟。
    LOAD DATA LOCAL INFILE "C:\MyDocs\SQL.txt" INTO TABLE Orders;
  • LOW_PRIORITY:延遲插入,等待該資料表無其他讀取操作時才寫入,避免阻塞。
    LOAD DATA LOW_PRIORITY INFILE "/home/mark/data.sql" INTO TABLE Orders;
  • REPLACE / IGNORE:處理重複鍵值衝突。REPLACE 以新資料取代舊資料;IGNORE 則保留舊資料、略過新資料。
    LOAD DATA LOW_PRIORITY INFILE "/home/mark/data.sql" REPLACE INTO TABLE Orders;

欄位格式控制(FIELDS 子句)

若資料檔非預設的 Tab 分隔,可自訂分隔符、引用字元、跳脫字元:

LOAD DATA INFILE "/home/mark/Orders.txt" REPLACE INTO TABLE Orders
FIELDS TERMINATED BY ',' ENCLOSED BY '"';
  • TERMINATED BY:欄位分隔符,預設 \t
  • ENCLOSED BY:欄位包裹字元,如雙引號
  • ESCAPED BY:跳脫字元,預設反斜線 \

指定匯入欄位(重要進階功能)

當來源檔案欄位與目標資料表不完全對應時(如從 Access 遷移至 MySQL,新增了額外欄位),可明確指定對應欄位:

LOAD DATA INFILE "/home/Order.txt" INTO TABLE Orders
(Order_Number, Order_Date, Customer_ID);

此功能為 mysqlimport 工具所不具備,極大提升遷移彈性。

小結

批次處理適合結構化 SQL 腳本部署;LOAD DATA INFILE 則是大量原始資料(CSV/TSV)高效匯入的首選,支援遠端本地檔案、優先級控制、重複鍵處理與欄位對應,是資料遷移與 ETL 的利器。

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