天天看點

csv批量導入mysql指令

今天把從Kaggle上下載下傳下來的csv資料導入mysql,想做個統計分析,怎奈csv檔案有些大。是以僅僅能用mysql 指令導入,現mark下,以備以後不時之需:

1. 導入:

基本的文法:
load data [low_priority] [local] infile 'file_name txt' [replace | ignore]
into table tbl_name
[character set gbk]
[fields
[terminated by't']
[OPTIONALLY] enclosed by '']
[escaped by'\' ]]
[lines terminated by'n']
[ignore number lines]
[(col_name, )]
           

導入指令_example:

load data infile 'csv檔案路徑\\test.csv' 
replace into table 表名              
fields terminated by ',' 
optionally enclosed by '"' 
lines terminated by '\n' 
ignore 1 lines(Id,@dummy,DayOfWeek,PdDistrict,Address,X,Y);           

不要小看這個簡單的example。包括了非常多東西;

第一行就是導入檔案;

第二行參看文法就會發現有兩個詞:replace 和 ignore 。replace和ignore關鍵詞控制對現有的唯一鍵記錄的反複的處理。假設你指定replace。新行将取代有同樣的唯一鍵值的現有行。假設你指定ignore。跳過有唯一鍵的現有行的反複行的輸入。假設你不指定不論什麼一個選項,當找到反複鍵時,出現一個錯誤,而且文本檔案的餘下部分被忽略。

是以我認為現實情況下你的表設計主鍵。還是最好要不會反複的字段;

第三~四行非常easy就是每一個詳細字段内容之間是以逗号隔開的,那就以逗号分開。

erminated by描寫叙述字段的分隔符。預設情況下是tab字元(\t)

enclosed by描寫叙述的是字段的括起字元。就是說字段中假設有引號。就當做是字段的一部分。

文法中另一個是 escaped by, 它描寫叙述的是轉義字元。

預設的是反斜杠(backslash:\ )

第五行 lines terminated by是對每行進行切割。這裡要注意一個問題。假設csv檔案是在windows下生成,那切割用 ‘\r\n’。linux下用 ‘\n’。

第六行中 ignore 1 lines 是忽略第一行。由于第一行往往是字段名。後邊括号裡有個字段非常特别 @dummy,它是說假設csv檔案裡有個字段我不想插進去。那就把相應字段名變成@dummy。

2. 導出:

select * from 表名
into outfile '導出路徑\\test.csv' 
fields terminated by ',' 
optionally enclosed by '"' 
escaped by '"' 
lines terminated by '\n';