数据导入
通过数据导入向导导入数据
首先新建一个数据库和要从.csv导入数据的表,注意数据格式的选取。
然后将csv文件用NOTEPAD++打开,将文件格式转换为UTF8.转化完成即可关闭。
在Mysql Workbench中想要导入数据的表,右键选取 Table Data Import Wizard进入数据导入向导,在文件路径中找到csv文件,下一步。
选择Use exist table,即选择已存在表格(一开始创建的表),注意对照表名是否正确,不对则在下拉菜单中找到需要导入数据的表,下一步。
再次对照表头名称是否匹配,下一步。
下一步,即可开始导入数据。
参考:https://www.bilibili.com/video/BV1jf4y1E7Q9
实测这种导入数据的办法实在是太慢了,我从下午四点开始导入到凌晨一点只到21250条数据,效率实在太低,数据总共56万多条。而且很怕电脑突然死机。
(在两点半开始报错,倒在了第24593条数据,orz)
故试着寻找其他导入办法。
通过LOAD DATA INFILE语句
找到相关文章,整理如下:
先进行如下准备:
1.新建数据库、表
2.转换CSV数据格式:将csv文件用NOTEPAD++打开,将文件格式转换为UTF8.并确保数据和创建的表的列数、数据类型等相匹配。
注意:此导入方法需要格外注意数据的格式。如果你不熟悉mysql的相关数据格式处理方法,建议提前通过excel等进行初步的数据格式处理,否则导入数据时格式不匹配的部分会全是NULL。
3.保证连接到MySQL数据库服务器的帐户具有FILE和INSERT权限。
如何查看本地数据导入权限是否开启?
show variables like '%secure%'; -- 用于查看本地文件导入权限是否开启
如果结果中显示为OFF,则可进行如下操作:
set global local_infile =1; -- 用于打开权限
然后进行数据导入:
use uber;
LOAD DATA LOCAL INFILE 'G:/datasets/Uber/Uber-Jan-Feb-FOIL.csv'
INTO TABLE uber_jan_feb_foil
FIELDS TERMINATED BY ','
IGNORE 1 LINES
我本以为只要这个权限打开即可直接进行数据导入了,但是还是会报错errorcode:2068,遂进行接下来的尝试。
通过语句:
show global variables like '%secure_file_priv%';
找到有secure_file_priv权限的目录,然后将要导入的CSV文件复制到该目录下。
执行语句:
use uber;
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/Uber-Jan-Feb-FOIL.csv' -- 文件路径"/",注意这里是没有LOCAL关键字的
INTO TABLE uber_jan_feb_foil -- 在数据库中创建的要插入的表的名称
FIELDS TERMINATED BY ',' -- 以','为分隔符
ENCLOSED BY '"' -- 去掉字符串中包裹的符号'"'
LINES TERMINATED BY '\n' -- 以'\n'为行间分隔符
IGNORE 1 ROWS; -- 忽略第一行,因为第一行往往是表头
(实测第二种方法导入全部数据564516条只用了7.640秒!)
参考如下:
https://www.zhihu.com/question/426972214
https://zhuanlan.zhihu.com/p/52660215
后续补充
语句:
show global variables like '%secure_file_priv%';
可以查看到限制导入导出文件的存放位置。
secure_file_priv为 NULL 时,表示不允许导入或导出。
secure_file_priv为路径时(如/var/lib/mysql-files/ ),表示只允许在此路径目录中执行。
secure_file_priv没有值时,表示可在任意目录的导入导出。
可以打开 my.cnf 或 my.ini,添加以下语句,重启 MySQL / MariaDB server 即可
secure_file_priv=''
重启 MySQL / MariaDB:
sudo systemctl restart mysql
关于设置secure_file_priv=''我在mysqlworkbench做尝试输入 set globle secure_file_priv='' 但是报错errorcode1238,在查阅后得知:只读参数,只能在启动命令行或my.cnf添加或者在my.cnf添加,遂不再做尝试。可参考:https://zhangdong.me/mysql/error-1238.html
参考:https://www.cnblogs.com/syw20170419/p/16783573.html
数据导出
语句如下:
##SELECT '月份', '当月订单数', '上月订单数', '环比增长率'
##UNION ALL --用于添加表头
SELECT *
FROM growth_rate_2014 --mysql里要导出的数据
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/growth_rate_2014.csv' -- 导出的目标路径,同样是之前导入数据时的安全路径,想导出到其他位置请阅读前文补充
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';
在导出以后,如果文件中有中文,出现乱码。一种可行的解决办法是使用NOTEPAD++打开文件,然后编码从UTF-8改成 ANSI ,然后保存。再通过excel打开即可。