csv导入mysql_CSV文件与MySQL表的导入、导出

06d73945e1bb38ff082df56c2249ed7e.png

一、将CSV文件导入MySQL表

这里主要用到的是LOAD DATA INFILE语句

在导入文件操作之前,需要准备以下内容:

  • 将要导入文件的数据对应的数据库表。
  • 准备好一个CSV文件,其数据与表的列数和每列中的数据类型相匹配。
  • 连接到MySQL数据库服务器的帐户具有FILEINSERT权限。

1、本地导入(这里是centos7)

1)将要导入文件的数据对应的数据库表。

新建一个名为train的表;

use tmp;
CREATE TABLE `train` (
  `user_id` varchar(255) DEFAULT NULL,
  `age_range` varchar(255) DEFAULT NULL,
  `gender` varchar(255) DEFAULT NULL,
  `merchant_id` varchar(255) DEFAULT NULL,
  `label` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

2)准备好一个CSV文件,其数据与表的列数和每列中的数据类型相匹配。

以下是train.csv文件的内容,第一行作为列标题和后面四行则为数据。

user_id,age_range,gender,merchant_id,label
34176,6,0,944,-1
34176,6,0,412,-1
34176,6,0,1945,-1
34176,6,0,4752,-1

3)连接到MySQL数据库服务器的帐户具有FILEINSERT权限。

这里要把csv文件放到有file权限的目录,否则会报错没有权限

18a6b3cbdaeb55e0e44a93fbc837aa75.png

根据报错提示找到这个有secure_file_priv权限的目录

show global variables like '%secure_file_priv%';

6c6c78d808be275ee7c387334c177ef8.png

然后把csv文件复制到这个目录下:

cp train.csv /var/lib/mysql-files/

然后就可以执行导入:

LOAD DATA INFILE '/var/lib/mysql-files/train.csv' 
INTO TABLE train 
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY 'n'
IGNORE 1 ROWS;

执行结果:

608375841434b85373229a89d8babb0f.png

700多万行的数据只用了41s,效果还是可以接受;

2、将文件从客户端导入远程MySQL数据库服务器

可以使用LOAD DATA INFILE语句将数据从客户端(本地计算机)导入远程MySQL数据库服务器。

当您在LOAD DATA INFILE中使用LOCAL选项时,客户端程序会读取客户端上的文件并将其发送到MySQL服务器。该文件将被上传到数据库服务器操作系统的临时文件夹,例如Windows上的C:windowstemp或Linux上为/tmp目录。 此文件夹不可由MySQL配置或确定。

导入代码:

LOAD DATA LOCAL INFILE '/var/lib/mysql-files/train.csv' 
INTO TABLE train 
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY 'n'
IGNORE 1 ROWS;

唯一的区别是语句中多了个LOCAL选项。

如果加载一个大的CSV文件,将会看到使用LOCAL选项来加载该文件将会稍微慢些,因为需要时间将文件传输到数据库服务器。

使用LOCAL选项时,连接到MySQL服务器的帐户不需要具有FILE权限来导入文件。但是使用LOAD DATA LOCAL将文件从客户端导入到远程数据库服务器时,有一些安全问题应该要注意,以避免潜在的安全风险。

二、从MySQL表导出csv文件

1、

在导出数据之前,必须确保:

  • MySQL服务器的进程对包含目标CSV文件的目标文件夹具有写访问权限。
  • 要导出的目标CSV文件不能存在。

1)要导出的数据查询结果:

SELECT * FROM train;

我这里是取了该表所有的字段;

2)将上述查询结果集导出为CSV文件

SELECT * FROM train
INTO OUTFILE '/var/lib/mysql-files/train.csv' 
FIELDS ENCLOSED BY '"' 
TERMINATED BY ',' 
ESCAPED BY '"' 
LINES TERMINATED BY 'rn';

执行结果:

00f7ce6ee563fcf139bc743b72297156.png

导出700多万行只用了7s左右;

该sql语句表示,在/data/datas/目录下创建一个名称为train.csv的CSV文件。

CSV文件包含结果集中的行集合。

每行由一个回车序列和由LINES TERMINATED BY 'rn'子句指定的换行字符终止。

文件中的每行包含表的结果集的每一行记录。

每个值由FIELDS ENCLOSED BY '"'子句指示的双引号括起来。 这样可以防止可能包含逗号(,)的值被解释为字段分隔符。 当用双引号括住这些值时,该值中的逗号不会被识别为字段分隔符。

可能会遇到的问题:

1、1261 - Row 4855735 doesn't contain data for all columns

或者

Row 1 doesn't contain data for all columns

解决方法:

show variables like 'sql_mode';
set sql_mode='';

参考链接:

将CSV文件导入MySQL表 - MySQL教程™​www.yiibai.com
f44325e09eae8bc63b4db73efa2dfeb8.png
MySQL将表导出为CSV - MySQL教程™​www.yiibai.com mysql导出导入文件问题整理​www.jianshu.com
666af7240737e8a672a47588cffbe744.png
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值