Mysql workbench的csv文件导入与导出

Mysql workbench的csv文件导入与导出

数据导入

通过数据导入向导导入数据

首先新建一个数据库和要从.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打开即可。

相关推荐

美团团购优惠券在哪里找?美团团购优惠券在哪领?美团团购优惠券怎么领
男女的体力差异的原因是什么

男女的体力差异的原因是什么

📅 09-18 👁️ 6923
App Store预览

App Store预览

📅 07-20 👁️ 8680