LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' [REPLACE | IGNORE] INTO TABLE tbl_name [CHARACTER SET charset_name] [FIELDS [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ] [IGNORE number LINES] [(col_name_or_user_var, ...)] [SET col_name = expr, ...]
| 子句 | 默認值 | 說明 |
|---|---|---|
FIELDS TERMINATED BY | \t (Tab) | 字段分隔符 |
FIELDS ENCLOSED BY | 空 | 字段包圍字符(如雙引號) |
FIELDS ESCAPED BY | \\ | 轉義字符 |
LINES TERMINATED BY | \n | 行結束符(Windows 用 \r\n) |
LINES STARTING BY | 空 | 行前綴(罕用) |
IGNORE n LINES | 0 | 跳過前 n 行(如 CSV 標題行) |
REPLACE | — | 主鍵/唯一鍵衝突時覆蓋舊行 |
IGNORE | — | 衝突時跳過新行 |
文件 city.txt(每行一城市):
北京 上海 深圳 廣州
SQL:
LOAD DATA LOCAL INFILE 'C:/Users/XXX/Desktop/city.txt' INTO TABLE sys_sensitiveword_t (cityname);
表結構:
CREATE TABLE stu_other ( id INT AUTO_INCREMENT PRIMARY KEY, stu_name VARCHAR(50), age INT );
文件 stu.txt(Tab 分隔,順序與建表一致):
100001 FLB100001 20 100002 FLB100002 21 100003 FLB100003 22
SQL:
LOAD DATA LOCAL INFILE 'C:/stu.txt' INTO TABLE stu_other FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n'; -- Windows 文件
導出配合:SELECT ... INTO OUTFILE
注意: 導出目錄需 MySQL 服務進程寫權限(受
secure_file_priv限制),文件不能預存。常見坑與避坑指南
- secure_file_priv:
SHOW VARIABLES LIKE 'secure_file_priv';只能讀寫該目錄下文件,或設置為空解除限制(需重啟)。- LOCAL 關鍵字:
LOCAL INFILE表示客戶端讀文件並發送給服務端,無需服務端文件權限,但需客戶端與服務端均啟用local_infile=1。- 字符集不匹配: 文件為 GBK、表為 UTF8 → 指定
CHARACTER SET gbk或預先轉碼。- 主鍵衝突: 根據業務選
REPLACE(覆蓋)或IGNORE(跳過)。- 大文件分批: 單文件超 1GB 建議拆分,避免長事務、主從延遲。