首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL CSV 批量導入導出實戰:LOAD DATA INFILE 與 SELECT INTO OUTFILE 完整參數解析

     編輯:MySQL 綜合教學

MySQL CSV 批量導入導出實戰:LOAD DATA INFILE 與 SELECT INTO OUTFILE 完整參數解析

1. 導入:LOAD DATA INFILE

LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE 'file_path'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[CHARACTER SET charset_name]
[FIELDS
    [TERMINATED BY '\t']
    [[OPTIONALLY] ENCLOSED BY '\"']
    [ESCAPED BY '\\']
]
[LINES TERMINATED BY '\n']
[IGNORE number LINES]
[(col_name_or_user_var, ...)]

實戰示例

LOAD DATA INFILE 'C:/data/test.csv'
REPLACE INTO TABLE my_table
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(Id, @dummy, DayOfWeek, PdDistrict, Address, X, Y)
SET update_time = CURRENT_TIMESTAMP;

關鍵參數詳解

參數說明常見值
REPLACE / IGNORE主鍵/唯一鍵衝突處理:REPLACE 覆蓋,IGNORE 跳過,不指定則報錯REPLACE
FIELDS TERMINATED BY字段分隔符',' (CSV), '\t' (TSV)
ENCLOSED BY字段包裹符(含引號時)'\"'
ESCAPED BY轉義字符'\\'
LINES TERMINATED BY行結束符Windows: '\r\n', Linux: '\n'
IGNORE n LINES跳過前 n 行(通常跳過標題行)1
(col, @dummy, ...)列映射:@dummy 表示跳過該 CSV 列不導入按需映射
SET col=expr導入時額外賦值(如寫入導入時間)CURRENT_TIMESTAMP

2. 導出:SELECT INTO OUTFILE

SELECT * FROM my_table
INTO OUTFILE 'C:/export/test.csv'
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '\"'
ESCAPED BY '\"'
LINES TERMINATED BY '\n';

3. 權限與安全限制

  • 需 FILE 權限:GRANT FILE ON *.* TO 'user'@'host';
  • 文件路徑必須在 secure_file_priv 目錄下(SHOW VARIABLES LIKE 'secure_file_priv'; 查看)
  • 導出文件不能覆蓋已存在文件,需先刪除或改名
  • LOCAL 關鍵字:客戶端讀取本地文件發送給服務端,不受 secure_file_priv 限制,但需客戶端支持

4. 大文件導入優化建議

  • 臨時關閉索引:ALTER TABLE t DISABLE KEYS; 導入後 ENABLE KEYS;(MyISAM 有效,InnoDB 無效)
  • 調大 bulk_insert_buffer_size、innodb_buffer_pool_size
  • 事務批次提交(自腳本控制)
  • 使用 mysqlimport 命令行工具(封裝 LOAD DATA)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved