2013年12月22日

MySQL 從資料表進行匯入或匯出資料


從文字檔匯入

LOAD DATA 指令可以很方便得將 CSV 格式資料匯入到資料表,並且有錯誤處理的機制避免 duplicate-key 的產生,詳細資訊可以參考 help load data。另外在 shell 底下也能使用 mysqlimport 進行匯入,詳細使用方式請參考 mysqlimport --help

mysql> help LOAD DATA
Name: 'LOAD DATA'
Description:
Syntax:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
        [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,...]

LOAD DATA 預設欄位分隔為(tab), 但可以用 colums 參數修改分隔字符
mysql> LOAD DATA LOAD INFILE '/path/input.txt' INTO TABLE tb-example COLUMNS TERMINATED BY ',';

若系統是 windows, 由於 windows 的文字檔斷行字元是 \r\n, 所以要用 LINES 修改
mysql> LOAD DATA LOCAL INFILE 'C:\input.txt' INTO TABLE tb-example LINES TERMINATED BY '\r\n';

REPLACE | IGNORE 是 unique 欄位在匯入過程中,當遇到重複值時的處理方式,REPLACE 會進行覆蓋,IGNORE 則是直接略過。當兩者都不指定時,預設行為要看是否有加上 LOCAL 參數。若有 LOCAL時,預設同加上 IGNORE。若沒有 LOCAL 時,則是會跳出錯誤訊息並中止後續的匯入動作。

匯出到文字檔

利用 SELECT 語法的 INTO OUTFILE  'file name' 即可將資料表的內容進行篩選匯出成文字檔

沒有留言:

張貼留言