大量資料初始化時,LOAD DATA INFILE 比 INSERT 快數十倍。本文以實際案例演示:建表 → 準備文字檔 → 執行導入 → 驗證結果,重點講解欄位/行分隔符參數設定。
CREATE TABLE `field` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`col1` VARCHAR(50),
`col2` INT,
`col3` DATE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
D:/field.txt內容範例 (欄位以 Tab \t 分隔,行尾 \n):
value1 100 2023-01-01
value2 200 2023-01-02
value3 300 2023-01-03
LOAD DATA INFILE 'D:/field.txt'
INTO TABLE `field`
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
(`col1`, `col2`, `col3`); -- 明確指定欄位順序,跳過自增 id
| 子句 | 說明 | 本例設定 |
|---|---|---|
FIELDS TERMINATED BY | 欄位分隔符 | '\t' (Tab) |
FIELDS ENCLOSED BY | 欄位包圍字元 (如 CSV 雙引號) | 本例無,省略 |
FIELDS ESCAPED BY | 轉義字元 | 預設 \\ |
LINES TERMINATED BY | 行結束符 | '\n' (Linux) 或 '\r\n' (Windows) |
IGNORE n LINES | 跳過前 n 行 (如標題行) | 本例無標題,省略 |
(col_list) | 指定導入目標欄位順序 | 對應文字檔欄位,自增/預設值欄位可省略 |
SELECT COUNT(*) FROM `field`; -- 應返回 3
SELECT * FROM `field` LIMIT 5;
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\\\'。'D:/data.txt' 或雙反斜線 'D:\\\\data.txt'。FILE 權限;若報 ERROR 1290,檢查 secure_file_priv 變數限制目錄,或將檔案放入該目錄。LOCAL 關鍵字 (LOAD DATA LOCAL INFILE ...) 讓客戶端讀取檔案並傳給伺服器,需客戶端與伺服器均啟用 local_infile=1。SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0;,導入後恢復並 COMMIT;,可大幅提速。小結: 掌握 LOAD DATA 分隔符參數與權限設定,是高效完成資料遷移、ETL 初始化的核心技能。