CSV文件导入MySQL

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

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

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

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

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

首先,创建discounts表:

use testdb;

CREATE TABLE discounts (

id INT NOT NULL AUTO_INCREMENT,

title VARCHAR(255) NOT NULL,

expired_date DATE NOT NULL,

amount DECIMAL(10 , 2) NULL,

PRIMARY KEY (id)

);

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

id,title,expired date,amout1,"Spring Break 2018",20180401,20

2,"Back to Scholl 2017",20170901,29

3,"Summer 2018",20180820,100

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

LOAD DATA INFILE 'F:/worksp/mysql/discounts.csv'INTO TABLE discounts

FIELDS TERMINATED BY','ENCLOSED BY'"'LINES TERMINATED BY'\n'IGNORE1 ROWS;

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

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

导入时转换数据

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

有一个discount_2.csv文件中,它存储的过期日期列是mm/dd/yyyy格式。内容如下:

id,title,expired date,amout4,"Item-4","01/04/2018",200

5,"Item-5","01/09/2017",290

6,"Item-6","12/08/2018",122

将数据导入discounts表时,必须使用str_to_date()函数将其转换为MySQL日期格式

LOAD DATA INFILE 'F:/worksp/mysql/discounts_2.csv'

INTO TABLE discounts

FIELDS TERMINATED BY ',' ENCLOSED BY '"'

LINES TERMINATED BY '\n'

IGNORE 1 ROWS

(id,title,@expired_date,amount)

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配置或确定。

示例:

LOAD DATA LOCAL INFILE'c:/tmp/discounts.csv'INTO TABLE discounts

FIELDS TERMINATED BY','ENCLOSED BY'"'LINES TERMINATED BY'\n'IGNORE1 ROWS;

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

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

MySQL导出CSV文件

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

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

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

示例:

查询从orders表中查询选择已取消的订单,将此结果集导出为CSV文件

SELECT

orderNumber, status, orderDate, requiredDate, comments

FROM

orders

WHERE

status= 'Cancelled'INTO OUTFILE'F:/worksp/mysql/cancelled_orders.csv'FIELDS ENCLOSED BY'"'TERMINATED BY';'ESCAPED BY'"'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文件。

SET @TS = DATE_FORMAT(NOW(),'_%Y%m%d_%H%i%s');

SET @FOLDER= 'F:/worksp/mysql/';

SET @PREFIX= 'orders';

SET @EXT= '.csv';

SET @CMD= CONCAT("SELECT * FROM orders INTO OUTFILE '",@FOLDER,@PREFIX,@TS,@EXT,"' FIELDS ENCLOSED BY '\"' TERMINATED BY ';' ESCAPED BY '\"'","LINES TERMINATED BY '\r\n';");

PREPARE statement FROM @CMD;

EXECUTE statement;

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

最后,使用EXECUTE命令执行语句。

使用列标题导出数据

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

(SELECT 'Order Number','Order Date','Status')

UNION

(SELECT orderNumber,orderDate, status

FROM orders

INTO OUTFILE'F:/worksp/mysql/orders_union_title.csv'FIELDS ENCLOSED BY'"' TERMINATED BY ';' ESCAPED BY '"'LINES TERMINATED BY'\r\n');

处理NULL值

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

SELECT

orderNumber, orderDate, IFNULL(shippedDate,'N/A')

FROM

orders INTO OUTFILE'F:/worksp/mysql/orders_null2na.csv'FIELDS ENCLOSED BY'"'TERMINATED BY';'ESCAPED BY'"'LINES

TERMINATED BY'\r\n';

用N/A字符串替换了shippingDate列中的NULL值。 CSV文件将显示N/A而不是NULL值。

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

mysql 导入文件夹_MySQL-导入与导出相关推荐

  1. mysql 数据库 文件夹_mysql 数据库 文件夹

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  2. power bi导入文件夹_从Power BI Desktop中的PDF文件导入数据

    power bi导入文件夹 Power BI Desktop is a useful reporting and analytical tool to represent data in variou ...

  3. 使用idea导入文件夹作为项目时,在项目中的文件夹可能会被隐藏

    2019独角兽企业重金招聘Python工程师标准>>> 问题:使用idea导入文件夹作为项目时,有些项目目录下的文件夹或文件可能会被隐藏掉,如图1-1所示   1-1 所造成的原因是 ...

  4. 【maxscript】批量导入文件夹下obj

    需求 已知一个文件夹下包含很多obj和文件夹,2层文件夹下也包含很多obj和文件夹,3层文件夹下--现在需要将该文件夹下所有obj读取 代码 rollout window "批量导入obj& ...

  5. 用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题

    用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题 用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题 提示找不到表,我去看了一下,丢失了很多个表: ...

  6. mysql表导出和导入命令行_MySQL命令行导出导入数据库和数据表-Go语言中文社区...

    MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:Program FilesMySQLMySQL Server ...

  7. mysql数据转储方法_Mysql数据库各种导出导入数据方式的区别(我的理解错误还望指正)...

    mysqldump,NAVICAT转储,select * outfile在千级数据,万级,百万级数据下的表现. 千级数据 mysqldump导出sql文件 导出是出了拒绝访问的错误:为对应目录(.sq ...

  8. mysql怎么导出导入数据库结构_mysql导入SQL、导出数据库、表、结构

    导入SQL文件:在DOS的 MYSQL安装目录/BIN 目录下用下面命令: mysql -u username -p databasename use database_name 然后使用下面这个命令 ...

  9. mysql 导入sql命令_MySQL导入.sql文件及常用命令

    MySQL导入.sql文件及常用命令 在MySQL Qurey   Brower中直接导入*.sql脚本,是不能一次执行多条sql命令的,在mysql中执行sql文件的命令: mysql> so ...

最新文章

  1. 如何扫描和修复 Linux 磁盘错误
  2. 常用的前端辅助开发工具有哪些
  3. 原文件内容更新及备份,特殊标量$^I和@ARGV学习笔记
  4. python执行linux和window的命令
  5. Effective Java~3. 私有Constructor 或Enum 强化单例
  6. 阿里云飞天AI加速器+Serverless容器,帮助图森未来提升资源利用率
  7. usaco2.11Ordered Fractions
  8. 一文带你认清数据仓库“维度模型设计”与“分层架构” | 原力计划
  9. 辨异 —— 概率与统计
  10. 打开 Freetextbox 的 InsertImageFromGallery 及如何接收 ftb.imagegallery.aspx 返回的图片信息...
  11. 账龄分析表excel模板_老会计分享财务报表及EXCEL会计报表分析系统模板!收藏领取!...
  12. ZPL效果在线打印测试和相关手册及编程语言资料
  13. polyval matlab 怎么用,matlab 中polyval的用法 最好能举个例子
  14. 8K摄像机研发之路有多难?一起了解你不知道的首款国产8K小型化广播级摄像机背后的故事
  15. svg图片调整大小和颜色
  16. 第三篇:【重磅】呼叫中心运营指标KPI字典
  17. 【数据技术】关于HP Vertica MPP列式数据库资源池设置的一点心得
  18. 【IoT】基于 CC2530 的 ZigBee 物联网系统设计
  19. Vim的几个高级玩法
  20. 好玩的手机淘宝社群,发单初体验

热门文章

  1. ASP.NET Core中使用MediatR实现命令和中介者模式
  2. VSCode开发.NETCore项目入门(1)设置中文语言环境
  3. 与时俱进 | 博客现已运行在 .NET Core 3.0 及 Azure 上
  4. C#中谁最快:结构还是类?
  5. [NewLife.XCode]实体类详解
  6. eShopOnContainers 知多少[7]:Basket microservice
  7. GitHub宣布GitHub Education 新计划,学校可免费用企业版
  8. Entity Framework Core 2.0 全局查询过滤器
  9. 理解C# 4 dynamic(3) – DynamicObject的使用
  10. 程序员的情人节礼物:当天微软开始Build 2017登记