MySQL導出導入csv文件

本打算用navicat for mysql(version10.0.11)直接導出csv文件,但發現‘導出數據’對話框中並無’.csv’選項,只好選擇命令語句導出csv,但在這個過程中遇到了一些問題,特作此記錄。

導出csv文件

導出數據到csv基本語句

SELECT * FROM 表名

INTO OUTFILE '導出目錄及文件名'   

FIELDS TERMINATED BY ','   #字段間以,號分隔

OPTIONALLY ENCLOSED BY '"'  #字段用"號括起

ESCAPED BY '"'         #字段中使用的轉義符爲"

LINES TERMINATED BY '\r\n';  #行以\r\n結束

在這裏插入圖片描述

"secure-file-priv"錯誤原因及解決方法

secure_file_priv參數用於限制LOAD DATA, SELECT …OUTFILE, LOAD_FILE()傳到哪個指定目錄。

在我運行上述導出語句後,提示ERROR:
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

經查詢,錯誤原因是在安裝MySQL的時候限制了導入與導出的目錄權限。
我們可以通過show variables like '%secure%';命令查看‘secure-file-priv’ 當前的值是什麼。

  • secure_file_priv 爲 NULL 時,表示限制mysqld不允許導入或導出
  • secure_file_priv 爲 /tmp時,表示限制mysqld只能在/tmp目錄中執行導入導出,其他目錄不能執行
  • secure_file_priv 沒有值時,表示不限制mysqld在任意目錄的導入導出

在這裏插入圖片描述
可以看到,我的secure_file_priv 爲 NULL,表示限制不能導入導出。爲了改變MySQL的導入導出權限,需要打開my.cnf 或 my.ini(一般在MySQL安裝路徑主目錄下),加入以下語句,重啓MySQL即可。
secure_file_priv='' #不限制MySQL在任意目錄的導入導出
在這裏插入圖片描述

MySQL的重啓

MySQL的重啓不是關閉cmd或navicat在打開就好,必須依次執行以下命令才能夠重啓:
net stop mysql #關閉mysql服務
net start mysql #打開mysql服務
在這裏插入圖片描述

mysql導出目錄的進一步說明

重新執行下圖的導出csv命令後,沒有報錯,說明文件導出成功,但是在桌面我卻沒有看到‘person.csv’文件,最終在C盤的根目錄下發現‘UsersAdministratorDesktopperson.csv’文件,說明程序將‘Users\Administrator\Desktop\person.csv’整個視爲文件名。然後我將語句中的目錄路徑中的‘\’換爲’/’,成功在桌面導出‘person.csv’文件。可對比下面兩張圖。
在這裏插入圖片描述
在這裏插入圖片描述
因此,在導出數據過程中,導出目錄需要使用斜槓‘/’而非反斜槓‘\’。此外還可以直接輸出INTO OUTFILE '\文件名' ,這是文件直接輸出到該數據庫目錄下,即’\MySQL安裝目錄\data\數據庫名\文件名’。在這裏插入圖片描述
在這裏插入圖片描述

導入csv數據

導入數據基本LOAD DATA 語法

LOAD DATA INFILE '導入目錄及文件名'   

INTO TABLE 表名

FIELDS TERMINATED BY ','

OPTIONALLY ENCLOSED BY '"'

ESCAPED BY '"'  

LINES TERMINATED BY '\r\n';

在這裏插入圖片描述

Duplicate entry ‘1’ for key 'PRIMARY’錯誤及解決方法

如上圖所示,在向person表中導入數據時,提示出錯“Duplicate entry ‘1′ for key ‘PRIMARY’ ”,錯誤原因是在一張數據表中是不能同時出現多個相同主鍵的數據。解決方法有:

  1. IGNORE
    load data infile "目錄及文件" ignore into table 表名;
  2. REPLACE
    load data infile "目錄及文件" replace into table 表名;

replace和ignore關鍵詞控制對現有的唯一鍵記錄的重複的處理。如果你指定replace,新行將代替有相同的唯一鍵值的現有行。如果你指定ignore,跳過有唯一鍵的現有行的重複行的輸入。如果你不指定任何一個選項,當找到重複鍵時,出現一個錯誤,並且文本文件的餘下部分被忽略。

在網上找了好久解決方法,但大多數時INSERT插入數據時的解決方法,在這裏分享一篇LOAD導入數據的文章:mysql導入數據load data infile用法

我分別試驗了IGNORE與REPLACE關鍵字,下面兩張對比可以看到,IGNORE受影響的行數爲0;而REPLACE受影響的行爲3。
在這裏插入圖片描述在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章