MySQL 導入excel、csv、txt 文件到數據庫

MySQL學習—快速導入數據

複習mysql 的建庫、建表, 考慮後期將項目的數據逐漸遷入到服務器數據庫,因此嘗試着將數據傳入到本地mysql數據庫,期間碰到一坑;以下記錄本次所碰到的坑。

此過程中需修改的配置文件my.in.

  • 導入文件的路徑問題
  • 導入數據某些字段中存在空值報錯問題

注意: mysql 需要很好的掌握my.in. 文件的配置,經常會用到

1. 導入數據的步驟

(1) 建表

按照正常的建表操作進行建表, CREATE TABLE 表名()【此處不做過多的闡述, 詳細知識點需複習】,例子:

CREATE TABLE tmll_taobao(
`年月` CHAR(20),
`淘寶月銷額` INT DEFAULT NULL,
tao_goods INT,
`所有帖子數` INT DEFAULT NULL,
`所有轉發數` INT,
`所有評論數` INT,
`轉發1及以上帖子數` INT,
`重點品類` INT
);

(2)導入數據

導入數據採用 load data infiel 方式 ,因爲此種方式寫入速度快,易操作

參數說明:

into outfile ‘導出的目錄和文件名’
指定導出的目錄和文件名

fields terminated by ‘字段間分隔符’
定義字段間的分隔符

optionally enclosed by ‘字段包圍符’
定義包圍字段的字符(數值型字段無效)

lines terminated by ‘行間分隔符’
定義每行的分隔符

導入數據例子:

LOAD DATA INFILE 'C:/Users/lvdian/Desktop/tmall1.csv' INTO TABLE  tmll_taobao -- 路徑名用  / 斜杆【與windows不一樣】
FIELDS TERMINATED BY ','  --分割符
OPTIONALLY ENCLOSED BY '"' --如果字段裏有",需要加上
LINES TERMINATED BY '\r\n'-- 換行符
IGNORE 1 LINES; -- 忽略第一行的字段名

此處遇到問題了,報錯 顯示:

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

查看服務器的secure_file_priv設置的路徑:

SHOW GLOBAL VARIABLES LIKE '%secure_file_priv%';

原因~~是MYSQL 5.7 版本對於 數據安全考慮,查看官方文檔,secure_file_priv參數用於限制LOAD DATA, SELECT …OUTFILE, LOAD_FILE()傳到哪個指定目錄。

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

填坑方法:修改my.in. 配置文件:

(1)找到配置文件my.in.

修改爲 secure_file_priv=

(2)重啓mysql服務

重啓服務後即可正常使用。

此過程中遇到的第2個問題是當excel中存在缺失值時,也會終止數據的導入:

解決辦法:

修改 my.ini. 配置:參考博文

my.ini中查找sql-mode,
默認爲sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",
將其修改爲sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",重啓mysql後即可

重啓 服務器後即上傳成功,速度超塊。

說明:1. 可以上傳txt、csv 格式的數據文件

  1. 儘量不要使用sql_yog、native 等工具上傳數據,超慢。

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