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 discountsFIELDS TERMINATED BY , ENCLOSED BY "LINES TERMINATED BY nIGNORE 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 discountsFIELDS TERMINATED BY , ENCLOSED BY "LINES TERMINATED BY nIGNORE 1 ROWS;唯一一點不同就是用 LOCAL 參數,如果上傳較大的文件,可能會慢一點,畢竟需要將文件上傳到伺服器需要時間。
通過本地上傳文件不需要伺服器的特別許可權,
遠程客戶端上傳文件有一些需要注意的地方請參考 security issues
推薦閱讀:
※現在的區塊鏈技術,正如 1993 年的互聯網
※從矽谷小白到市場總監,我是怎樣成為一名增長黑客的
※【收藏】學習數據分析必讀的數據清單(海外版)
TAG:数据分析 |