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 格式的數據文件
- 儘量不要使用sql_yog、native 等工具上傳數據,超慢。