1. 程式人生 > >資料庫匯入/匯出csv格式的資料檔案+新增新的欄位

資料庫匯入/匯出csv格式的資料檔案+新增新的欄位

一.簡單,但是稍慢的方法,使用Navicat for MySQL

傻瓜式匯入資料庫:

流程如下:

安裝完成並配置好連線後介面如下:

新建資料庫

進入匯入嚮導

選擇匯入型別:

然後選擇檔案作為資料來源,這裡是我之前抓好的包,300w+條抓包記錄

這裡直接採取預設設定

同樣預設

自己設定了下表明,新建了表

這裡是程式根據檔案內容進行的猜測,注意要修改下資料型別,並根據需要做相應調整,這裡有點不太好,目前只找到了通過方向鍵“下”來新增,沒有其他操作,如果增加的資料記錄沒有填寫,則自動刪除。

我將包的資訊縮減到只用我需要的,這樣抓取的資訊就從1G銳減到200+M

 半小時,300w+個記錄

這慢的,誰用誰知道~~~~

二.使用SQL語句匯入csv為表,速度快!

使用SQL語句可以快速實現大量資料匯入資料庫的效果。示例如下:

?
1 2 3 4 5 6 7 8 9 10 11 # Windows 中 load data infile '..\\uploads\\test.csv' into table sampleTableName fields terminated by ','  optionally enclosed by '"' escaped by ','    lines terminated by '\r\n' ignore 1 lines;
# Linux 中 load data infile '..\\uploads\\test.csv' into table sampleTableName fields terminated by ','  optionally enclosed by '"' escaped by ','    lines terminated by '\n' ignore 1 lines;

解釋:

  1. load data infile + 檔案路徑:這裡使用了相對路徑,我的機子上安裝的MySQL在'C:\ProgramData\MySQL\MySQL Server 5.7'中,一般情況下,csv檔案中第一行一般是每列屬性的名稱,因此在匯入資料庫時應省略第一行
  2. 句子中sampleTableName應替換為對應的表的名稱
  3. csv檔案中,域一般用逗號分隔,域的欄位值一般用一對雙引號包裹,換行一般用‘\r\n’(windows下),因此我發現一般escaped by+逗號與lines terminated by+'\r\n'有對應關係,如果用escaped by """,即引號分隔,則只有將lines terminated by改成'\n'才能匯入,並且此時不能ignore 1 lines;

常見錯誤:

Error Code 1290:

我機子上安裝的是MySQL5.7,

MySQL5.7預設執行的狀態是:

Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

 這是因為需要匯入的檔案不再MySQL認為的安全資料夾內,因此MySQL拒絕了匯入操作。

使用如下語句可看到MySQL當前認為的安全資料夾,將檔案放入資料夾內即可

?
1 SHOW VARIABLES LIKE 'secure_file_priv';

三、使用SQL語句將資料庫表匯出為csv檔案

 鑑於Navicat比較容易上手,所以這裡只介紹一下如何用SQL語句將資料庫表匯出為csv檔案:

用select語句選擇需要匯出的欄位、表,說明其他附加條件(例如用where子句,還可以進行排序),然後說明匯出檔案的路徑和檔名,注意,如果是MySQL是在 secure-file-priv 選項下執行,則必須將路徑調整為上文說過的

secure-file-priv路徑,如果不知道,就用show variables like檢視,否則報錯Error 1209

當然,這樣匯出要求匯出的檔案不存在,否則報錯 Error 1086

示例如下:

?
1 2 3 4 5 select * from newdb2.dataset where vendor = 'xiaomi' order by time  into outfile 'C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads\\test.csv' fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n';

 此示例用到了where 子句和order by 排序,應該夠用了

那就這樣~see you~