MySQL添加CSV文件中的數據


一。MySQL添加csv數據


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

LOAD DATA INFILE 命令允許你讀取文本文件然后非常快速的插入數據庫。

導入文件之前,你需要准備以下的內容:

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

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

我們使用 [CREATE TABLE statement][1]命令創建 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:\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' 進行說明。

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

 

二。導入數據轉換格式


有時數據的格式並不滿足數據庫表格中目標列的格式。簡單的情況下,你可以在LOAD DATA INFILE 中設置 set 選項 以轉換數據

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

當向 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。文件將被上傳到服務器端相應的臨時目錄內,比如 Windows 中 C:\windows\temp 或 linux中 /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服務端,需要注意一些安全問題,你必須意識到這些問題以規避潛在的安全風險。

此文章轉載自:https://www.cnblogs.com/nju2014/p/5456632.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM