此問題是前幾天整理資料的時候碰到的,資料存在csv
檔案中(200多萬記錄),通過python 往資料庫中匯入太慢了,後來使用mysql
中自帶的命令load data infile
, 30多秒就能夠完成二三百萬的資料量匯入。
load data infile
命令允許你讀取文字檔案然後非常快速的插入資料庫。
匯入檔案之前,你需要準備以下的內容:
假定我們擁有乙個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');
使用命令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
服務端,需要注意一些安全問題,你必須意識到這些問題以規避潛在的安全風險。
此文章**自:
MySql csv檔案匯入匯出
一 匯出到csv 本地匯出 通過mysql客戶端shell連線到伺服器,選擇使用的資料庫,輸入sql select from test info into outfile tmp test.csv fields terminated by 欄位間以,號分隔 optionally enclosed b...
mysql csv6 mysql匯入csv格式檔案
今天測試匯入csv格式檔案,雖然簡單但是如果不注意還是會出現錯誤,而且mysql在某些方面做的確實對新手不是很友好,記錄一下 建立乙個csv格式檔案 mysql 1 ycrdb more tmp loaddata.txt 1,abc,abc qq.com 1,abc,abc qq.com 1,abc...
mac 用datax從csv檔案匯入mysql
skipheader true writer password 123456 username root presql session set session sql mode ansi writemode insert setting 3 執行命令 位置是 home datax datax 出現的...