建立資料庫與資料表後,下一步就是高效匯入資料。MySQL 提供多種匯入方式,適用不同場景與效能需求。
-- 基本語法
INSERT INTO table_name VALUES (val1, val2, ...);
INSERT INTO table_name (col1, col2, ...) VALUES (val1, val2, ...);
INSERT INTO table_name SET col1=val1, col2=val2, ...;
INSERT INTO table_name (col1, col2) SELECT col1, col2 FROM other_table;
批次插入(單一 statement 多筆資料,大幅降低網路往返與解析成本):
INSERT INTO table_name VALUES
(val1, val2), (val3, val4), (val5, val6);
直接由伺服器讀取文字檔,速度遠快於 INSERT。需 FILE 權限,檔案須可讀。若指定 LOCAL,則由客戶端讀取並傳送,不需 FILE 權限。
| 條件 | 無 LOCAL | 有 LOCAL |
|---|---|---|
| 絕對路徑 | 伺服器根目錄起始 | 客戶端根目錄起始 |
| 相對路徑 | 伺服器資料目錄起始 | 客戶端目前工作目錄起始 |
LOAD DATA [LOCAL] INFILE 'filename'
INTO TABLE table_name
[FIELDS
[TERMINATED BY 'char']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_list)]
FIELDS TERMINATED BY:欄位分隔符(預設 Tab)。ENCLOSED BY:欄位包圍字元(常用雙引號)。ESCAPED BY:逸出字元(預設 \)。LINES TERMINATED BY:列結束符(可多字元,預設 \n)。IGNORE n LINES:略過前 n 列(如標題列)。LOAD DATA LOCAL INFILE 'sample.txt'
INTO TABLE sample
FIELDS TERMINATED BY ',' ENCLOSED BY '"';
本質是 LOAD DATA 的命令列介面。語法:
mysqlimport [options] database_name textfile1 [textfile2 ...]
table.txt, table.1.txt, table.2.txt...mysqlimport -u root --local \
--fields-terminated-by=',' \
--fields-enclosed-by='"' \
samp_db samp_table.txt
INSERT(含批次)。LOAD DATA 或 mysqlimport,效能最佳。mysqlimport 適合 Shell 腳本整合。