【MySQL】CSV 文件導入MySQL

此問題是前幾天整理數據的時候碰到的,數據存在 CSV文件中(200多萬記錄),經過python 往數據庫中導入太慢了,後來使用MySQL 中自帶的命令 LOAD DATA INFILE, 30多秒就可以完成二三百萬的數據量導入。html

LOAD DATA INFILE 命令容許你讀取文本文件而後很是快速的插入數據庫。python

導入文件以前,你須要準備如下的內容:mysql

  • 建立相應數據的數據庫表格。
  • CSV 文件中的數據須要和數據庫表格在列數數據類型保持一致。
  • 具備寫入數據庫的文件和插入權限的帳戶

    假定咱們擁有一個 discounts 的表格,結構以下:

咱們使用 [CREATE TABLE statement][1]命令建立 discounts 表格:linux

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 文件的首行做爲列名稱,其餘三行爲數據。sql

如下的命令使得 c:\tmp\discounts.csv 的文件存入 discounts表格。數據庫

LOAD DATA INFILE 'c:/tmp/discounts.csv' 
INTO TABLE discounts 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

文件中的數據閾由逗號分隔開,代碼中反映爲 FIELD TERMINATED BY ',' ,並且數據由雙引號包圍,經過 ENCLOSED BY '" ‘ 標明
CSV 中的換行標記由 LINES TERMINATED BY '\n' 進行說明。windows

另外:文件中的首行是標題並須要存入數據庫表格中,所以經過IGNORE 1 ROWS進行忽略。安全

導入數據轉換格式


有時數據的格式並不知足數據庫表格中目標列的格式。簡單的狀況下,你能夠在LOAD DATA INFILE 中設置 set 選項 以轉換數據服務器

假定 discount_2.csv 文件中的過時時間列 是mm/dd/yyyy 的格式。code

當向 discounts 表格中導入數據時,咱們必須經過 str_to_date() function 轉換成MySQL日期的格式

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');

客戶端向遠程MySQL數據庫導入數據


使用命令 LOAD DATA INFILE從客戶端(本地電腦)向遠程MySQL數據庫導入數據是徹底可行的。

當你使用LOAD DATA INFILE 中的LOCAL 選項,客戶端程序讀取本地的文件,而後將其發送到MySQL server。文件將被上傳到服務器端相應的臨時目錄內,好比 WindowsC:\windows\templinux/temp
此文件夾沒法被MySQL配置或佔用。

咱們看看下面的例子:

LOAD DATA LOCAL INFILE  'c:/tmp/discounts.csv'
INTO TABLE discounts
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

惟一的差異在於命令中的 LOCAL 選項。若是你須要load 一個大的CSV文件,你會注意到LOCAL 選項,它會比平時慢一些,由於更多時間浪費在數據傳輸上面。

當你使用 LOCAL 選項時,鏈接 MySQL server的帳戶並不須要文件權限來導入數據。

使用 LOAD DATA LOCAL 導入本地文件到遠程 MySQL服務端,須要注意一些安全問題,你必須意識到這些問題以規避潛在的安全風險。

此文章轉載自:http://www.mysqltutorial.org/import-csv-file-mysql-table/

相關文章
相關標籤/搜索