萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 按條件導出/導入指定資料:SELECT INTO OUTFILE 與 LOAD DATA 實戰

MySQL 提供 SELECT ... INTO OUTFILE 將查詢結果直接寫入伺服器端檔案,搭配 LOAD DATA INFILE 可實現高效率的資料遷移與歸檔。本文詳細說明語法、權限要求、跨平台路徑差異與實戰腳本。

一、 導出資料:SELECT INTO OUTFILE

基本語法

SELECT col1, col2, ...
FROM db.table
WHERE condition
INTO OUTFILE '/path/to/file.txt'
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n';

Linux 環境腳本範例(按日期導出前一天資料)

#!/bin/bash
yesterday=$(date -d "-1 day" +%Y%m%d)
outfile="/var/lib/mysql/stat/yl_clicks_${yesterday}.txt"
sqlfile="/tmp/cmd_yl_clicks_${yesterday}.sql"

# 1. 產生 SQL 腳本
cat > "$sqlfile" <

Windows 環境直接指令

SELECT ITEM1_1, ID, ITEM2_1, ... 
FROM `ID_7_vote_insert` 
WHERE `VoteID`='7' 
ORDER BY ITEM1_1 ASC
INTO OUTFILE 'C:/tmp/test_new.txt'
FIELDS TERMINATED BY ',' ENCLOSED BY '\"';

二、 導入資料:LOAD DATA INFILE / mysqlimport

方法 A:SQL 指令

LOAD DATA INFILE '/var/lib/mysql/stat/yl_clicks_20240101.txt'
INTO TABLE stat.yl_clicks
FIELDS TERMINATED BY ',' ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
(coder, clicknum, time);

欄位對應順序需與檔案一致;若表有自增主鍵,可用 NULL 或略過該欄位。

方法 B:mysqlimport 命令列工具(支援日誌記錄)

mysqlimport -u username -ppassword -f -i stat \
"D:/MySQL/data/stat/yl_clicks.txt" >> sync.log
  • -f:遇錯誤強制繼續
  • -i:顯示匯入統計資訊

三、 關鍵權限與坑點總結

  1. FILE 權限:執行帳號需具備 FILE 權限(GRANT FILE ON *.* TO 'user'@'host';)。
  2. secure_file_priv:MySQL 5.7+ 預設限制導入導出目錄,查詢 SHOW VARIABLES LIKE 'secure_file_priv'; 確認允許路徑,或在 my.cnf 設定 secure_file_priv='' 解除限制(需重啟)。
  3. 檔案路徑:INTO OUTFILE 路徑為「伺服器端」絕對路徑,非客戶端本機路徑。
  4. 字元集:導出前執行 SET NAMES utf8mb4; 避免中文亂碼。
copyright © 萬盛學電腦網 all rights reserved