CSV文件导入MySQL

LOAD DATA INFILE语句允许您从文本文件读取数据,并将文件的数据快速导入数据库的表中。

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

  一、将要导入文件的数据对应的数据库表。

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

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

首先,创建discounts表:

  1. use testdb;
  2. CREATE TABLE discounts (
  3. id INT NOT NULL AUTO_INCREMENT,
  4. title VARCHAR() NOT NULL,
  5. expired_date DATE NOT NULL,
  6. amount DECIMAL( , ) NULL,
  7. PRIMARY KEY (id)
  8. );

discounts.csv文件的内容,第一行作为列标题和其他三行则为数据。

  1. id,title,expired date,amout
  2. ,"Spring Break 2018",,
  3. ,"Back to Scholl 2017",,
  4. ,"Summer 2018",,

接下来,将数据从F:/worksp/mysql/discounts.csv文件导入到discounts表。

  1. LOAD DATA INFILE 'F:/worksp/mysql/discounts.csv'
  2. INTO TABLE discounts
  3. FIELDS TERMINATED BY ','
  4. ENCLOSED BY '"'
  5. LINES TERMINATED BY '\n'
  6. IGNORE ROWS;

文件的字段由FIELD TERMINATED BY ','指示的逗号终止,并由ENCLOSED BY '"'指定的双引号括起来。

因为文件第一行包含列标题,列标题不需要导入到表中,因此通过指定IGNORE 1 ROWS选项来忽略第一行。

导入时转换数据

数据格式与表中的目标列不匹配,用LOAD DATA INFILE语句中的SET子句进行转换。

  1. 有一个discount_2.csv文件中,它存储的过期日期列是mm/dd/yyyy格式。内容如下:
  2. id,title,expired date,amout
  3. ,"Item-4","01/04/2018",
  4. ,"Item-5","01/09/2017",
  5. ,"Item-6","12/08/2018",122
  6.  
  7. 将数据导入discounts表时,必须使用str_to_date()函数将其转换为MySQL日期格式
  1. LOAD DATA INFILE 'F:/worksp/mysql/discounts_2.csv'
  2. INTO TABLE discounts
  3. FIELDS TERMINATED BY ',' ENCLOSED BY '"'
  4. LINES TERMINATED BY '\n'
  5. IGNORE 1 ROWS
  6. (id,title,@expired_date,amount)
  7. SET expired_date = STR_TO_DATE(@expired_date, '%m/%d/%Y');

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

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

LOAD DATA INFILE中使用LOCAL选项时,客户端程序会读取客户端上的文件并将其发送到MySQL服务器。该文件将被上传到数据库服务器操作系统的临时文件夹,

Windows上的C:\windows\temp,此文件夹不可由MySQL配置或确定。

  1. 示例:
  2. LOAD DATA LOCAL INFILE 'c:/tmp/discounts.csv'
  3. INTO TABLE discounts
  4. FIELDS TERMINATED BY ','
  5. ENCLOSED BY '"'
  6. LINES TERMINATED BY '\n'
  7. IGNORE ROWS;

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

使用LOCAL选项时,连接到MySQL服务器的帐户不需要具有FILE权限来导入文件。

MySQL导出CSV文件

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

一、MySQL服务器的进程对包含目标CSV文件的目标文件夹具有写访问权限。

二、要导出的目标CSV文件不能存在。

  1. 示例:
  2.  
  3. 查询从orders表中查询选择已取消的订单,将此结果集导出为CSV文件
  4. SELECT
  5. orderNumber, status, orderDate, requiredDate, comments
  6. FROM
  7. orders
  8. WHERE
  9. status = 'Cancelled'
  10.  
  11. INTO OUTFILE 'F:/worksp/mysql/cancelled_orders.csv'
  12. FIELDS ENCLOSED BY '"'
  13. TERMINATED BY ';'
  14. ESCAPED BY '"'
  15. LINES TERMINATED BY '\r\n';

该语句在F:/worksp/mysql/目录下创建一个包含结果集,名称为cancelled_orders.csv的CSV文件。

CSV文件包含结果集中的行集合。每行由一个回车序列和由LINES TERMINATED BY '\r\n'子句指定的换行字符终止。文件中的每行包含表的结果集的每一行记录。

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

将数据导出到文件名包含时间戳的CSV文件

将数据导出到CSV文件中,该文件的名称包含创建文件的时间戳。

将整个orders表导出为将时间戳作为文件名的一部分的CSV文件。

  1. SET @TS = DATE_FORMAT(NOW(),'_%Y%m%d_%H%i%s');
  2.  
  3. SET @FOLDER = 'F:/worksp/mysql/';
  4. SET @PREFIX = 'orders';
  5. SET @EXT = '.csv';
  6.  
  7. SET @CMD = CONCAT("SELECT * FROM orders INTO OUTFILE '",@FOLDER,@PREFIX,@TS,@EXT,
  8. "' FIELDS ENCLOSED BY '\"' TERMINATED BY ';' ESCAPED BY '\"'",
  9. " LINES TERMINATED BY '\r\n';");
  10.  
  11. PREPARE statement FROM @CMD;
  12.  
  13. EXECUTE statement;

    首先
    ,构造了一个具有当前时间戳的查询作为文件名的一部分。
  14.  
  15. 其次,使用PREPARE语句FROM命令准备执行语句。
  16.  
  17. 最后,使用EXECUTE命令执行语句。

使用列标题导出数据

要添加列标题,需要使用UNION语句如下:

  1. (SELECT 'Order Number','Order Date','Status')
  2. UNION
  3. (SELECT orderNumber,orderDate, status
  4. FROM orders
  5. INTO OUTFILE 'F:/worksp/mysql/orders_union_title.csv'
  6. FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"'
  7. LINES TERMINATED BY '\r\n');

处理NULL值

如果结果集中的值包含NULL值,则目标文件将使用“N/A”来代替数据中的NULL值。要解决此问题,您需要将NULL

  1. SELECT
  2. orderNumber, orderDate, IFNULL(shippedDate, 'N/A')
  3. FROM
  4. orders INTO OUTFILE 'F:/worksp/mysql/orders_null2na.csv'
  5. FIELDS ENCLOSED BY '"'
  6. TERMINATED BY ';'
  7. ESCAPED BY '"' LINES
  8. TERMINATED BY '\r\n';
  9.  
  10. N/A字符串替换了shippingDate列中的NULL值。 CSV文件将显示N/A而不是NULL值。

值替换为另一个值,例如不适用(N/A),方法是使用IFNULL函数,如下:

MySQL-导入与导出的更多相关文章

  1. MYSQL导入,导出命令。

    Windows下 命令速度远远快于客户端工具导库 导入SQL文件命令,D:\mysqlserver\bin>mysql -uroot -p e6wifi_content <C:/Users ...

  2. mysql导入和导出数据

    Linux下如何单个库进行导入和备份操作 1.将数据导入数据库mysql -u账号 -p密码 数据库<sql脚本 mysql -uroot -proot test</home/upload ...

  3. [转]MySQL导入和导出SQL脚本

    首先,使用mysqldump命令的前提是,在Cmd中进入mysql安装目录下的bin目录下,才可以使用该命令.我的mysql安装在E:盘,所以,首先进入bin目录下:E:/Program Files/ ...

  4. mysql导入、导出 ( 带视图)

    1创建账号授权 grant all privileges on jenkinsddbes.* to 'jenkinsddbes'@'%' identified by '1iN@Da12tA&* ...

  5. MySQL导入及导出数据库

    一.数据库导入 背景:已经从A机器把SQL文件导出,现在需要将sql文件导入B机器(两台机器都是Linux系统) 将sql文件上传到B机器,然后在B机器命令行执行以下命令(不用进入到数据库) 前提是t ...

  6. MySQL导入与导出SQL

    一.导入SQL 方法一: (1)选择数据库 use databaseName; (2)设置数据库编码 set names utf8; (3)导入数据(注意sql文件的路径) source **.sql ...

  7. 从mysql导入及导出csv

    csv导入: load data local infile 'D:/pcode/shu/data/a.csv' into table a fields terminated by ','; csv导出 ...

  8. 数据可视化基础专题(四):Pandas基础(三) mysql导入与导出

    转载(有添加.修改)作者:但盼风雨来_jc链接:https://www.jianshu.com/p/238a13995b2b來源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处 ...

  9. 利用Java进行MySql数据库的导入和导出

    利用Java来进行Mysql数据库的导入和导出的总体思想是通过Java来调用命令窗口执行相应的命令. MySql导出数据库的命令如下: mysqldump -uusername -ppassword  ...

  10. linux mysql导入导出

    linux下导入.导出mysql数据库命令 一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):1.导出数据和表结构:mysqldump -u用户名 -p密码 数据库名 ...

随机推荐

  1. ssd运行过程中遇到的bug

    1.出现以下错误: 没有添加环境变量: https://github.com/weiliu89/caffe/issues/4 可以看到当前PYTHONPATH不再ssd1里面,所以需要修改,修改之后就 ...

  2. C++ 线程同步的四种方式

    程之间通信的两个基本问题是互斥和同步. (1)线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒. (2)线程互 ...

  3. vue之packages.json添加注释的正确写法

    (1)问题描述 使用vue脚手架vue-cli搭建好项目架构后,在packages.json文件里,加入注释(如下所示).接下来,运行npm run dev命令后出现报错 (2)问题解析 ①记得jso ...

  4. JAVA基础——设计模式之观察者模式

    观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependen ...

  5. Android图像处理之Bitmap类(1)

    Bitmap是Android系统中的图像处理的最重要类之一.用它可以获取图像文件信息,进行图像剪切.旋转.缩放等操作,并可以指定格式保存图像文件.本文从应用的角度,着重介绍怎么用Bitmap来实现这些 ...

  6. linux中查看文件指定行的数据

    http://jingyan.baidu.com/article/15622f24125872fdfdbea560.html

  7. js 实现弹力球效果

    1.html代码: <div id='imgid'> <img src="img/5.png"> </div> 2.js代码: imgobj=d ...

  8. CF508E Arthur and Brackets

    题目大意:给出n对括号,并给出每对括号距离的范围.问能否找到这样一个序列. 题解:好多人都用贪心.这么好的题为什么不搜一发呢? 注意:千万不要在dfs里面更新答案. 代码: #include<c ...

  9. 简述HTTP报文请求方法和状态响应码

    1. Method 请求方法,表明客户端希望服务器对资源执行的动作: 1.1 GET 向服务器请求资源. 1.2 HEAD 和GET方法的行为类似,但服务器在响应中只返回首部,不会返回实体的主体部分. ...

  10. Spring框架中 配置c3p0连接池

    开发准备: 1.导入jar包: ioc基本jar jdbcTemplate基本jar c3p0基本jar 别忘了mysql数据库驱动jar 原始程序代码:不使用配置文件方式(IOC)生成访问数据库对象 ...