首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 資料匯入全攻略:INSERT、LOAD DATA、mysqlimport 三大方式詳解

     編輯:MySQL 資料庫相關知識

方式一:INSERT 語句

基本語法

INSERT INTO tbl VALUES (v1, v2, ...);
INSERT INTO tbl (c1, c2) VALUES (v1, v2);
INSERT INTO tbl SET c1=v1, c2=v2;
INSERT INTO tbl (c1, c2) SELECT c1, c2 FROM tbl2;

批次插入(高效能)

INSERT INTO tbl VALUES (v1,v2), (v3,v4), (v5,v6);

單條 SQL 寫入多列,大幅減少網路往返與解析開銷,建議每批 1000-5000 列。

方式二:LOAD DATA INFILE(大量載入首選)

權限與路徑

  • 需 FILE 權限,檔案需伺服器可讀
  • 加 LOCAL 關鍵字:從客戶端讀取傳送,不需 FILE 權限
  • 路徑解析規則見下表
模式絕對路徑相對路徑
無 LOCAL伺服器根目錄起資料目錄起
LOCAL客戶端根目錄起客戶端當前目錄起

格式控制選項

LOAD DATA [LOCAL] INFILE 'file.txt'
INTO TABLE tbl
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(col1, col2, @var1, col3)
SET col3 = TRIM(@var1);
  • TERMINATED BY:欄位分隔符(預設 Tab)
  • ENCLOSED BY:欄位包圍字元(預設無)
  • ESCAPED BY:跳脫字元(預設 \)
  • LINES TERMINATED BY:列結束符(預設 \n)
  • IGNORE n LINES:跳過前 n 列(如標題列)
  • 欄位清單與 SET 子句支援匯入時轉換

範例:CSV 匯入

LOAD DATA LOCAL INFILE 'sample.txt'
INTO TABLE sample
FIELDS TERMINATED BY ',' ENCLOSED BY '"';

方式三:mysqlimport 命令列工具

本質是 LOAD DATA 的封裝,適合腳本自動化:

mysqlimport [options] db_name file.txt

# 範例:CSV 格式、本地檔案
mysqlimport -u root -p --local \
  --fields-terminated-by=',' --fields-enclosed-by='"' \
  samp_db samp_table.txt
  • 檔名(去副檔名)即為目標表名
  • 多檔案同表可用 samp_table.1.txt, samp_table.2.txt

效能比較與建議

大量匯入優化技巧

  • 匯入前 SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0;
  • MyISAM:DISABLE KEYS / ENABLE KEYS 暫停索引更新
  • InnoDB:按主鍵順序匯入減少頁分裂
  • 分批提交,避免單一超大事務鎖定資源
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方式適用場景效能備註
INSERT少量、應用邏輯內低批次化可提升
LOAD DATA大量初始化、ETL、遷移極高繞過 SQL 解析、索引延遲維護
mysqlimport定時排程、跨伺服器極高同 LOAD DATA,命令列友善