標籤:

Mysql——將CSV文件導入表中

本教程展示如何用LOAD DATA INFILE 將 CSV 文件導入MySQL表中。

LOAD DATA INFILE 語句可以讀取文本文件並導入資料庫中。

在導入文件之前,你需要做如下準備:

  • 導入文件的目標資料庫
  • csv文件的列與目標資料庫表的列的數量相同,並且每列的數據類型相同。
  • 有插入數據許可權的賬戶.

假設我們有數據表,命名位discounts有如下結構:

用 CREATE TABLE statement 創建discounts 如代碼:

CREATE TABLE discounts (

id INT NOT NULL AUTO_INCREMENT,

title VARCHAR(255) NOT NULL,

expired_date DATE NOT NULL,

amount DECIMAL(10 , 2 ) NULL,

PRIMARY KEY (id)

);

文件discounts.csv文件包含第一行作為列名,其他行作為數據,如下圖:

用以下語句來完成導入功能,例: c:tmpdiscounts.csv文件discounts表中;

LOAD DATA INFILE c:/tmp/discounts.csv

INTO TABLE discounts

FIELDS TERMINATED BY , #分隔符

ENCLOSED BY " #結尾符

LINES TERMINATED BY n #換行

IGNORE 1 ROWS; #忽略csv文件的第一行文件。

csv文件中,每列用逗號來分隔, 用雙引號" 『作為數據全文的結尾符。.

所有的 CSV 文件都是用 n 換行。.

因為文件第一行包含列名,所以,不應該導入數據表中,這裡用 IGNORE 1 ROWS option.語句忽略第一行,保證不導入。

現在,我們可查看 discounts 表 看數據是否導入。

SELECT * FROM discounts;

導入數據過程中變更數據格式:

有時候,我們要導入的數據不符合目標數據的格式,簡單的解決方式,你可以在導入數據過程中用set語句改變導入數據的格式;

expired date 數據是 mm/dd/yyyy 格式如下:

在導入過程中用str_to_date()函數來解決這個問題:

LOAD DATA INFILE c:/tmp/discounts_2.csv

INTO TABLE discounts

FIELDS TERMINATED BY , ENCLOSED BY "

LINES TERMINATED BY n

IGNORE 1 ROWS

(title,@expired_date,amount)

SET expired_date = STR_TO_DATE(@expired_date, %m/%d/%Y);

遠程客戶端導入數據

在本地電腦導入數據到遠端的伺服器,同樣用LOAD DATA INFILE語句

當加入 LOCAL 參數在 LOAD DATA INFILE語句中 , 客戶端會自動讀取本地文件,然後將讀取的數據發送到伺服器端,文件會上傳到伺服器,臨時文件在, C:windowstemp on Windows 或 /tmp on Linux. 此文件不可配置或變更(新版本解除限制)

舉例:

LOAD DATA LOCAL INFILE c:/tmp/discounts.csv

INTO TABLE discounts

FIELDS TERMINATED BY ,

ENCLOSED BY "

LINES TERMINATED BY n

IGNORE 1 ROWS;

唯一一點不同就是用 LOCAL 參數,如果上傳較大的文件,可能會慢一點,畢竟需要將文件上傳到伺服器需要時間。

通過本地上傳文件不需要伺服器的特別許可權,

遠程客戶端上傳文件有一些需要注意的地方請參考 security issues


推薦閱讀:

現在的區塊鏈技術,正如 1993 年的互聯網
從矽谷小白到市場總監,我是怎樣成為一名增長黑客的
【收藏】學習數據分析必讀的數據清單(海外版)

TAG:数据分析 |