資料庫匯入/匯出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;
|
解釋:
- load data infile + 檔案路徑:這裡使用了相對路徑,我的機子上安裝的MySQL在'C:\ProgramData\MySQL\MySQL Server 5.7'中,一般情況下,csv檔案中第一行一般是每列屬性的名稱,因此在匯入資料庫時應省略第一行
- 句子中sampleTableName應替換為對應的表的名稱
- 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~