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。包括了非常多東西;

第一行就是導入文件;

第二行參看語法就會發現有兩個詞:replaceignorereplaceignore關鍵詞控制對現有的唯一鍵記錄的反復的處理。假設你指定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'; 

希望多多交流!


免責聲明!

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



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