今天把從Kaggle上下載下來的csv數據導入mysql,想做個統計分析,怎奈csv文件有些大,所以只能用mysql 命令導入,現mark下,以備以後不時之需:
基本語法:
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,跳過有唯一鍵的現有行的重復行的輸入。如果你不指定任何一個選項,當找到重復鍵時,出現一個錯誤,並且文本文件的余下部分被忽略。
所以我覺得現實情況下你的表設計主鍵,還是最好要不會重復的字段;
第三~四行很簡單就是每個具體字段內容之間是以逗號隔開的,那就以逗號分開。
erminated by描述字段的分隔符,默認情況下是tab字符(\t)
enclosed by描述的是字段的括起字符,就是說字段中如果有引號,就當做是字段的一部分。
語法中還有一個是 escaped by, 它描述的是轉義字符。默認的是反斜槓(backslash:\ )
第五行 lines terminated by是對每行進行分割,這裡要注意一個問題,如果csv文件是在windows下生成,那分割用 ‘\r\n’,linux下用 ‘\n’。
第六行中 ignore 1 lines 是忽略第一行,因為第一行往往是字段名,後邊括號中有個字段很特別 @dummy,它是說如果csv文件中有個字段我不想插進去,那就把對應字段名變成@dummy。
PS:想順便插入導入時間,就在最後加上set update_time=current_timestamp;
2. 導出:
同時附帶上導出命令:
select * from 表名
into outfile '導出路徑\\test.csv'
fields terminated by ','
optionally enclosed by '"'
escaped by '"'
lines terminated by '\n';
希望多多交流!