批次模式讓 mysql 客戶端非互動式執行 SQL 腳本,適合自動化部署、日誌回放、大量資料初始化。
New_Data.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');
mysqld 服務運行。bin/mysql -p < /home/mark/New_Data.sql,輸入密碼後自動執行。若無法直接匯出舊資料庫,可利用其自動產生的 Binary Log(含原始 SQL 指令),配合批次模式快速導入新 MySQL 實例,免去手工撰寫 SQL 的繁瑣。
LOAD DATA INFILE 可在 MySQL 命令列或任何使用 MySQL API 的應用程式中直接呼叫,靈活度極高。
USE Meet_A_Geek;
LOAD DATA INFILE '/home/mark/data.sql' INTO TABLE Orders;
| 參數/子句 | 說明 |
|---|---|
LOCAL | 指定檔案在客戶端本地,MySQL 自動傳輸至伺服器,免 FTP 上傳 |
LOW_PRIORITY | 延遲插入,待無其他讀取該表時才執行,降低對線上查詢影響 |
REPLACE / IGNORE | 處理唯一鍵衝突:REPLACE 覆蓋舊行,IGNORE 跳過新行 |
FIELDS TERMINATED BY | 欄位分隔符(預設 Tab) |
FIELDS ENCLOSED BY | 欄位包裹字元(如雙引號) |
FIELDS ESCAPED BY | 逸出字元(預設反斜線) |
LOAD DATA INFILE '/home/mark/Orders.txt' REPLACE INTO TABLE Orders
FIELDS TERMINATED BY ',' ENCLOSED BY '"';
當來源資料欄位與目標表不一致(如從 Access 升級新增欄位),mysqlimport 失效,但 LOAD DATA INFILE 可精確指定對應欄位:
LOAD DATA INFILE '/home/Order.txt' INTO TABLE Orders
(Order_Number, Order_Date, Customer_ID);
欄位列表用括號括起、逗號分隔,順序對應檔案內容,極大提升遷移彈性。