今天把從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。
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';
希望多多交流!