10个MySQL加载数据内文件示例以将文本文件数据上传到表

如果文本文件中有数据,则可以轻松地将它们上载到数据库中的一个或多个表。
在MySQL数据库(或MariaDB)中,使用“ load data infile”命令,您可以将数据从文本文件上传到表。
load data infile命令提供了几个灵活的选项,可以将各种格式的数据从文本文件加载到表中。

  1. 文本文件加载数据的基本示例
  2. 使用“字段终止于”选项上传数据
  3. 使用“附件”选项上传数据
  4. 在文本文件数据中使用转义符
  5. 使用“行终止于”选项上传数据
  6. 使用“开始方式”选项忽略上传文件中的行前缀
  7. 从上传文件中忽略标题行
  8. 从上传文件仅上传特定列(并忽略其他列)
  9. 通过“设置”选项在上传过程中使用变量
  10. 编写Shell脚本以从文本文件加载数据

1.从文本文件加载数据的基本示例

        #cat employee1.txt
100     Thomas  Sales   5000
200     Jason   Technology      5500
300     Mayla   Technology      7000
400     Nisha   Marketing       9500
500     Randy   Technology      6000

默认情况下,load data infile命令使用TAB作为默认字段定界符。

首先,转到您要上载文本文件的数据库。在此示例中,我们将上面的employee1.txt文件上传到位于geekstuff mysql数据库下的employee表中。

        USE rumenzdata;

LOAD DATA INFILE 'employee1.txt'
INTO TABLE employee;

注意:在上面的示例中,该命令假定employee1.txt文件位于数据库目录下。例如,如果要在rumenzdata数据库中执行上述命令,则将文件放在以下位置:/ var/lib/mysql/rumenzdata/

        #上面输出
Query OK, 5 rows affected (0.00 sec)
Records: 5Deleted: 0Skipped: 0Warnings: 0

第一行“查询确定”表示查询已执行,没有任何错误。它还说总共有5行上载到该表。这还会显示将数据从文本文件上传到表所花费的时间(以秒为单位)。
第二行显示上传的总行数,跳过的行数以及在上传过程中显示警告的记录数。

        select * from employee;

±----±-------±-----------±-------+
| id| name | dept | salary |
±----±-------±-----------±-------+
| 100 | Thomas | Sales| 5000 |
| 200 | Jason| Technology | 5500 |
| 300 | Mayla| Technology | 7000 |
| 400 | Nisha| Marketing| 9500 |
| 500 | Randy| Technology | 6000 |
±----±-------±-----------±-------+

注意:如果要备份和还原整个MySQL数据库,请使用mysqldump命令。

2.使用“字段终止于”选项上传数据

在下面的示例中,在输入文件employee2.txt中,字段值用逗号分隔。

        #cat employee2.txt
100,Thomas,Sales,5000
200,Jason,Technology,5500
300,Mayla,Technology,7000
400,Nisha,Marketing,9500
500,Randy,Technology,6000

要将以上记录上传到员工表,请使用以下命令。
在上传过程中,使用“ FIELDS TERMINATED BY”选项,您可以指定逗号字段分隔符,如下所示。

        USE rumenzdata;

LOAD DATA INFILE 'employee2.txt'
INTO TABLE employee
FIELDS TERMINATED BY ',';

如果字段以冒号分隔,则在上面的命令中使用以下选项:

        FIELDS TERMINATED BY ':';

3.使用“附件”选项上传数据

在以下示例中,输入文本文件具有用双引号引起来的文本字段值。即,名称和部门值在其周围带有双引号。

        #cat employee3.txt
100,"Thomas Smith","Sales & Marketing",5000
200,"Jason Bourne","Technology",5500
300,"Mayla Jones","Technology",7000
400,"Nisha Patel","Sales & Marketing",9500
500,"Randy Lee","Technology",6000

在这种情况下,请使用“ENCLOSED BY”选项,如下所示。

        LOAD DATA INFILE 'employee3.txt' INTO TABLE employee FIELDS TERMINATED BY ',' ENCLOSED BY '"';
        select * from employee;
+-----+--------------+-------------------+--------+
| id| name | dept| salary |
+-----+--------------+-------------------+--------+
| 100 | Thomas Smith | Sales & Marketing | 5000 |
| 200 | Jason Bourne | Technology| 5500 |
| 300 | Mayla Jones| Technology| 7000 |
| 400 | Nisha Patel| Sales & Marketing | 9500 |
| 500 | Randy Lee| Technology| 6000 |
+-----+--------------+-------------------+--------+

4.在文本文件数据中使用转义符

假设您在特定字段的值中有逗号。例如,在下面的示例中,第二个字段名称具有以下格式的值:“名字,姓氏”。

        #cat employee4.txt
100,Thomas, Smith,Sales,5000
200,Jason, Bourne,Technology,5500
300,Mayla, Jones,Technology,7000
400,Nisha, Patel,Marketing,9500
500,Randy, Lee,Technology,6000

如果使用以下命令加载以上文件,则会看到该文件显示“ 10条警告”

        LOAD DATA INFILE 'employee4.txt'
->INTO TABLE employee
->FIELDS TERMINATED BY ',';
Query OK, 5 rows affected, 10 warnings (0.00 sec)
Records: 5Deleted: 0Skipped: 0Warnings: 10

由于字段之一的值中有逗号,因此记录也没有正确加载。

        select * from employee;
+-----+--------+---------+--------+
| id| name | dept| salary |
+-----+--------+---------+--------+
| 100 | Thomas |Smith|0 |
| 200 | Jason|Bourne |0 |
| 300 | Mayla|Jones|0 |
| 400 | Nisha|Patel|0 |
| 500 | Randy|Lee|0 |
+-----+--------+---------+--------+

正确的文件:要解决上述问题,请在名称字段值的逗号前面使用反斜杠(\),如下所示。

        #cat employee4.txt
100,Thomas\, Smith,Sales,5000
200,Jason\, Bourne,Technology,5500
300,Mayla\, Jones,Technology,7000
400,Nisha\, Patel,Marketing,9500
500,Randy\, Lee,Technology,6000

这次将正常工作,因为我们使用\作为转义字符。

        LOAD DATA INFILE 'employee4.txt'
->INTO TABLE employee
->FIELDS TERMINATED BY ',';

select * from employee;
±----±--------------±-----------±-------+
| id| name| dept | salary |
±----±--------------±-----------±-------+
| 100 | Thomas, Smith | Sales| 5000 |
| 200 | Jason, Bourne | Technology | 5500 |
| 300 | Mayla, Jones| Technology | 7000 |
| 400 | Nisha, Patel| Marketing| 9500 |
| 500 | Randy, Lee| Technology | 6000 |
±----±--------------±-----------±-------+

您还可以使用其他转义字符,如下所示。在此示例中,我们使用^作为转义字符,而不是defualt \。

        #cat employee41.txt
100,Thomas^, Smith,Sales,5000
200,Jason^, Bourne,Technology,5500
300,Mayla^, Jones,Technology,7000
400,Nisha^, Patel,Marketing,9500
500,Randy^, Lee,Technology,6000

在这种情况下,请使用“ ESCAPED BY”选项,如下所示。

        LOAD DATA INFILE 'employee41.txt' INTO TABLE employee FIELDS TERMINATED BY ',' ESCAPED BY '\^'

请注意,某些字符不能用作转义字符。例如,如果您将%用作转义字符,则会收到以下错误消息。

        LOAD DATA INFILE 'employee41.txt' INTO TABLE employee
FIELDS TERMINATED BY ',' ESCAPED BY '\%'

ERROR 1083 (42000): Field separator argument is not what is expected; check the manual

5.使用“行终止于”选项上传数据

除了将所有记录放在单独的行上之外,您还可以将它们放在同一行上。在下面的示例中,每个记录都由|分隔。符号。

        #cat employee5.txt
100,Thomas,Sales,5000|200,Jason,Technology,5500|300,Mayla,Technology,7000|400,Nisha,Marketing,9500|500,Randy,Technology,6000

要上传上述文件,请使用以“选项”终止的行,如下所示。

        LOAD DATA INFILE 'employee5.txt' INTO TABLE employee FIELDS TERMINATED BY ','LINES TERMINATED BY '|';

上面的命令将从employee5.txt上传记录,如下所示。

        select * from employee;
+-----+--------+------------+--------+
| id| name | dept | salary |
+-----+--------+------------+--------+
| 100 | Thomas | Sales| 5000 |
| 200 | Jason| Technology | 5500 |
| 300 | Mayla| Technology | 7000 |
| 400 | Nisha| Marketing| 9500 |
| 500 | Randy| Technology | 6000 |
+-----+--------+------------+--------+

如果输入文件来自Windows计算机,则可能要使用此命令:'\ r \ n'终止的行
如果您使用CSV文件将数据上传到表格,请尝试以下方法之一:1)以'\ r'终止的行2)以'\ r \ n'终止的行

6.使用“ Starting By”选项忽略上传文件中的行前缀

您还可以在输入文本文件中为记录添加一些前缀,在上传过程中可以忽略这些前缀。
例如,在下面的employee6.txt文件中,对于第一条记录,第二条记录和第五条记录,我们在行的开头有“数据:”。您可以通过忽略行前缀来仅上传这些记录。

        #cat employee6.txt
Data:100,Thomas,Sales,5000
Data:200,Jason,Technology,5500
300,Mayla,Technology,7000
400,Nisha,Marketing,9500
Data:500,Randy,Technology,6000

要忽略行前缀并上载这些记录(例如,上述文件中的“ Data:”),请使用“ lines starts by”选项,如下所示。

        LOAD DATA INFILE 'employee6.txt' INTO TABLE employee FIELDS TERMINATED BY ','LINES STARTING BY 'Data:';
#输出
Query OK, 3 rows affected (0.00 sec)
Records: 3Deleted: 0Skipped: 0Warnings: 0

如下所示,上述命令仅上载了以“ Data:”为前缀的记录。这有助于选择性地仅上传具有特定前缀的记录。

        select * from employee;
+-----+--------+------------+--------+
| id| name | dept | salary |
+-----+--------+------------+--------+
| 100 | Thomas | Sales| 5000 |
| 200 | Jason| Technology | 5500 |
| 500 | Randy| Technology | 6000 |
+-----+--------+------------+--------+
3 rows in set (0.00 sec)

7.从上传文件中忽略标题行

在以下输入文本文件中,第一行是标题行,其标题为列。

        #cat employee7.txt
empid,name,department,salary
100,Thomas,Sales,5000
200,Jason,Technology,5500
300,Mayla,Technology,7000
400,Nisha,Marketing,9500
500,Randy,Technology,6000

在上载期间,我们要忽略employee7.txt文件中的第一个标头留置权。为此,请使用IGNORE 1 lines选项,如下所示。

        LOAD DATA INFILE 'employee7.txt' INTO TABLE employee FIELDS TERMINATED BY ','IGNORE 1 LINES;

从下面的输出中可以看到,即使输入文件有6行,它也忽略了第一行(即标题行),并上传了其余5行。

        select * from employee;
+-----+--------+------------+--------+
| id| name | dept | salary |
+-----+--------+------------+--------+
| 100 | Thomas | Sales| 5000 |
| 200 | Jason| Technology | 5500 |
| 300 | Mayla| Technology | 7000 |
| 400 | Nisha| Marketing| 9500 |
| 500 | Randy| Technology | 6000 |
+-----+--------+------------+--------+

8.仅从上传文件上传特定列(并忽略其他列)

在下面的示例中,我们仅具有三个字段的值。在此示例文件中,我们没有部门列。

    #cat employee8.txt
100,Thomas,5000
200,Jason,5500
300,Mayla,7000
400,Nisha,9500
500,Randy,6000

要将值从输入记录上传到表中的特定列,请在装入数据文件中指定列名,如下所示。以下命令的最后一行具有应用于从输入文本文件上载记录的列名称。

        LOAD DATA INFILE 'employee8.txt' INTO TABLE employee FIELDS TERMINATED BY ','(id, name, salary);

由于我们没有在上面的命令中指定“ dept”列,因此我们将看到该列为NULL,如下所示。

        select * from employee;
+-----+--------+------+--------+
| id| name | dept | salary |
+-----+--------+------+--------+
| 100 | Thomas | NULL | 5000 |
| 200 | Jason| NULL | 5500 |
| 300 | Mayla| NULL | 7000 |
| 400 | Nisha| NULL | 9500 |
| 500 | Randy| NULL | 6000 |
+-----+--------+------+--------+

9.在上传过程中使用带有“设置”选项的变量

对于此示例,让我们使用以下employee2.txt文件。

        #cat employee2.txt
100,Thomas,Sales,5000
200,Jason,Technology,5500
300,Mayla,Technology,7000
400,Nisha,Marketing,9500
500,Randy,Technology,6000

在此示例中,我们希望在将薪金上载之前将其增加500。例如,Thomas的薪水(第一条记录)为5000。但是,在上载期间,我们希望将其增加500至5500,并更新表中的此增加值。为此,请使用SET命令并将薪水用作变量,并如下所示进行增量。

    LOAD DATA INFILE 'employee2.txt'INTO TABLE employeeFIELDS TERMINATED BY ','(id, name, dept, @salary)SET salary = @salary+500;

从以下输出中可以看到,在从文本文件上载数据期间,所有记录的salary列增加了500。

        select * from employee;
+-----+--------+------------+--------+
| id| name | dept | salary |
+-----+--------+------------+--------+
| 100 | Thomas | Sales| 5500 |
| 200 | Jason| Technology | 6000 |
| 300 | Mayla| Technology | 7500 |
| 400 | Nisha| Marketing|10000 |
| 500 | Randy| Technology | 6500 |
+-----+--------+------------+--------+

10.编写Shell脚本以从文本文件加载数据

有时,您可能希望自动从文本文件上传数据,而不必每次都登录到mysql提示符。
假设我们想将以下命令放入一个shell脚本中,然后在geekstuff数据库上自动执行该命令。

        LOAD DATA INFILE 'employee2.txt'INTO TABLE employeeFIELDS TERMINATED BY ','

要从命令行执行加载,您将在mysql命令中使用-e选项,并从linux提示符下执行它,如下所示。

    #mysql -e "LOAD DATA INFILE 'employee2.txt' INTO TABLE employee FIELDS TERMINATED BY ','" \-u root -pMySQLPassword rumenzdata

或者,您可以将其放入外壳脚本中,如下所示。在此示例中,load-data.sh Shell脚本具有上述mysql命令。

        #cat load-data.sh
mysql -e "\LOAD DATA INFILE 'employee2.txt'\
INTO TABLE employee \FIELDS TERMINATED BY ','\" \-u root -pMySQLPwd4MDN! test

授予该load-data.sh脚本执行权限,然后从命令行执行它,这会将数据自动加载到表中。您还可以将其作为cronjob进行调度,以按调度的时间间隔自动将文件中的数据加载到表中。

        #chmod u+x load-data.sh

#./load-data.sh

原文链接:https://rumenz.com/rumenbiji/mysql-load-data-infile.html

10个MySQL加载数据内文件示例以将文本文件数据上传到表相关推荐

  1. google支持本地ajax,360chrome,google chrome浏览器使用jquery.ajax加载本地html文件

    使用360chrome和google chrome浏览器加载本地html文件时,会报错,提示: XMLHttpRequest cannot load file:///Y:/jswg/code/html ...

  2. nginx 配置静态文件目录_nginx缓存静态资源,只需几个配置提升10倍页面加载速度...

    nginx缓存静态资源,只需几个配置提升10倍页面加载速度 首先我们看图说话 这是在没有缓存的情况下,这个页面发送了很多静态资源的请求: 可以看到,静态资源占用了整个页面加载用时的90%以上,而且这个 ...

  3. springboot mybatis 热加载mapper.xml文件(最简单)

    大家好,我是烤鸭: 今天介绍一下springboot mybatis 热加载mapper.xml文件. 本来不打算写的,看到网上比较流行的方式都比较麻烦,想着简化一下. 网上流行的版本. https: ...

  4. PCL入门系列 —— 加载ply格式mesh模型、点云数据并作可视化展示

    PCL入门系列 -- 加载ply格式mesh模型.点云数据并作可视化展示 前言 程序说明 输出结果 代码示例 总结 前言 随着工业自动化.智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要 ...

  5. SpringBoot+Mybatis加载Mapper.xml文件的两种方式

    前言:我们在平常工作中用到mybatis去加载Mapper.xml文件,可能mapper文件放的路径不一样,由此我们需要配置多个路径,幸运的是Mybatis支持我们配置多个不同路径.现在介绍两种方法. ...

  6. os引导程序boot从扇区拷贝os加载程序loader文件到内存(boot copy kernel to mem in the same method)

    [0]README 0.1) 本代码旨在演示 在boot 代码中,如何 通过 loader文件所在根目录条目 找出该文件的 在 软盘所有全局扇区号(簇号),并执行内存中的 loader 代码: 0.2 ...

  7. js后退页面不重新加载_快应用:支持加载单独JS文件的规范思考

    当前快应用的项目中,支持加载其它JS文件(通过:require('./foo.js')),然后通过webpack工具处理依赖,最终完成页面JS的构建,其中页面JS包含了引入的所有JS内容: 本文讨论的 ...

  8. 加载本地json文件,并利用批处理调用Chrome显示html

    加载本地json文件 1.加载本地json文件 为了调试保存在本地的json数据,需要进行读入.一般使用jQuery来进行,但需要对浏览器进行一点设置. Chrome浏览器中有一个启动选项--allo ...

  9. springboot 加载一个properties文件转换为对象、List和Map数据结构

    springboot 加载一个properties文件转换为对象.List和Map数据结构 一.springboot 加载一个properties文件转换为对象 1.1.配置文件-blog.prope ...

最新文章

  1. vc++6.0获取磁盘基本信息_分享一个实用脚本--一键获取linux内存、cpu、磁盘IO等信息...
  2. Java 线程——创建和运行线程|| lambda表达式就是一个匿名内部类||Thread 与 Runnable 的关系||FutureTask 配合 Thread
  3. 【三国志战略版】拆解与分析
  4. LIBSVM使用方法
  5. 高并发编程系列:NIO、BIO、AIO的区别,及NIO的应用和框架选型
  6. Python twisted事件驱动网络框架 源码剖析
  7. c语言case后语句,switch语句中case后的标号是什么
  8. 2022年:企业绩效管理蓝图
  9. 云轴ZStack Cloud云建设方案腾讯政务微信应用迁移
  10. 科目二上车前的基础说明
  11. pdf编辑软件哪个好?编辑pdf的软件分享一款,像word一样好用!
  12. 《关于TCP SYN包的超时与重传》——那些你应该知道的知识(四)
  13. vue开发APP使用微信分享和QQ分享功能
  14. android obb权限,解决部分手机读取obb失败的问题
  15. 全球及中国远程浏览器隔离解决方案行业投资分析与前景战略建议报告2022版
  16. 【人工智能】2017年中国人工智能技术——智能语音应用报告
  17. Android百度地图,绘制,覆盖物,导航,定位,细腻分解!
  18. 狼人杀3.0版本(自创)
  19. 奶块服务器显示维护是什么意思,奶块的维护是什么意思 | 手游网游页游攻略大全...
  20. 声纹技术(一):声纹技术的前世今生

热门文章

  1. 嵌入式数据库Sqlite移植教程-转
  2. 蓝桥杯 ADV-72 算法提高 一元一次方程
  3. c#与马扎克通讯_马扎克伺服报警
  4. linux下重命名文件
  5. 【跃迁之路】【722天】程序员高效学习方法论探索系列(实验阶段479-2019.2.12)...
  6. 温故而知新 Ajax 的新坑 dataType: 'json'
  7. Spark 整合ElasticSearch
  8. Java Queue 使用总结
  9. Java彻底 - WEB容器的侦听具体解释 ServletContextListener
  10. 编译安装Nginx-1.0.1