資料表建立後,匯入資料有三種主要方式:SQL INSERT、LOAD DATA INFILE、命令列工具 mysqlimport。本文系統說明語法、參數、權限、檔案定位規則與實務建議。
-- 基本單列
INSERT INTO tbl VALUES (val1, val2, ...);
INSERT INTO tbl (col1, col2) VALUES (val1, val2);
INSERT INTO tbl SET col1=val1, col2=val2;
-- 多列批次 (單條 SQL,效能遠優於迴圈)
INSERT INTO tbl VALUES (v11,v12), (v21,v22), (v31,v32);
-- 從另一表複製
INSERT INTO tbl (col1, col2) SELECT col1, col2 FROM tbl2;
LOAD DATA [LOCAL] INFILE 'filename' INTO TABLE tbl
[FIELDS
TERMINATED BY '\t'
ENCLOSED BY '"'
ESCAPED BY '\\'
]
[LINES TERMINATED BY '\n']
[IGNORE n LINES]
[(col_list)];
| 子句 | 預設 | 說明 |
|---|---|---|
FIELDS TERMINATED BY | \t (Tab) | 欄位分隔符 |
FIELDS ENCLOSED BY | 無 | 欄位包裹字元 (如 CSV 雙引號) |
FIELDS ESCAPED BY | \\ | 跳脫字元 |
LINES TERMINATED BY | \n | 換行符 (Windows 用 \r\n) |
IGNORE n LINES | 0 | 跳過前 n 列 (如 CSV 標題列) |
| 無 LOCAL (伺服器端) | 有 LOCAL (客戶端) | |
|---|---|---|
| 檔案位置 | 伺服器主機 | 客戶端主機 |
| 權限需求 | FILE 權限 | 無需 FILE 權限 |
| 路徑解析 | 絕對路徑:根目錄 相對路徑: datadir | 絕對路徑:根目錄 相對路徑:客戶端當前目錄 |
| 傳輸方式 | 直接讀取 | 客戶端讀取後經網路傳送 |
LOAD DATA LOCAL INFILE 'data.csv' INTO TABLE users
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(username, email, created_at);
mysqlimport [options] db_name textfile1 [textfile2...]
# 關鍵選項
--local # 使用 LOCAL 模式
--fields-terminated-by=,
--fields-enclosed-by=\"
--fields-escaped-by=\\
--lines-terminated-by=\r\n
--ignore-lines=1
--user=root --password
LOAD DATA SQL| 方法 | 速度 | 適用場景 | 權限 |
|---|---|---|---|
| INSERT (單條) | 慢 | 少量、條件邏輯、應用程式 | INSERT |
| INSERT (批次) | 中 | 中等量、應用程式組裝 | INSERT |
| LOAD DATA | 最快 | 大量 (萬~億列)、CSV/TSV、ETL | FILE (無 LOCAL) |
| mysqlimport | 最快 | 自動化排程、Shell 腳本 | 同 LOAD DATA |