1语法

LOAD DATA [ LOW_PRIORITY | CONCURRENT ] [ LOCAL ] INFILE 'file_name.txt'

[ REPLACE | IGNORE ]

INTO TABLE tbl_name

[ FIELDS

[ TERMINATED BY 'string' ]

[ [OPTIONALLY] ENCLOSED BY 'char' ]

[ ESCAPED BY 'char'  ]

]

[ LINES

[ STARTING BY 'string' ]

[ TERMINATED BY 'string' ]

]

[ IGNORE number LINES ]

[ (col_name_or_user_var,...) ]

[ SET col_name = expr,...] ]

关键字解释
  
  LOAD DATA [ LOW_PRIORITY | CONCURRENT ] [ LOCAL ] INFILE 'file_name.txt'

[ REPLACE | IGNORE ]

INTO TABLE tbl_name

1LOW_PRIORITY:   加载数据被延迟,直道没有其他客户端从表中读取为止  
   CONCURRENT:   当加载的数据正在进行的时,如果有用户请求则开启新的线程来获取数据

2如果指定了LOCAL 关键字,它将对连接的客户端做出解释:

• 如果指定了LOCAL,客户端主机上的客户端组件读取文件并发送到服务器。可以给出文件的完整路径以确定其精确位置。如果给出的是相对路径,则文件名是相对于客户端组件启动时所在的目录。
    • 如果没有指定LOCAL,文件是位于服务器的主机上,并且直接被服务器读取。
      当从服务器主机定位文件时,服务器使用下列规则:
        • 如果给定完整的路径,服务器使用该路径名。
        • 如果给定一个或多个前置构件的相对路径,服务器以相对服务器的数据目录搜索文件。
        • 如果给定没有前置构件的文件名,服务器从当前数据库的数据库目录搜寻文件。

3REPLACE 和IGNORE 关键字处理那些与已存在的主键值重复的输入记录
    如果指定了REPLACE,输入行将会代替已存在的行(也就是说,主索引值相同的行将作为存在的行)。参考REPLACE 语法 。
    如果指定了IGNORE,与已存在行主键值重复的输入行将被跳过。如果不指定二者中的任一个,则操作行为将依赖是否指定了LOCAL关键字。
    没有指定LOCAL,则如果发现有重复的键值,将产生一个错误,并忽略文本文件的其余部分。
    如果指定了LOCAL,则缺省的操作行为将与指定了IGNORE 的相同;这是因为,在操作过程中,服务器没有办法终止文件的传送。

[ FIELDS

[ TERMINATED BY 'string' ]

[ [OPTIONALLY] ENCLOSED BY 'char' ]   //enclosed by描述的是字段的括起字符。

[ ESCAPED BY 'char'  ]          //escaped by描述的转义字符。默认的是反斜杠 (backslash:\ )

]
  [ LINES

[ STARTING BY 'string' ]

[ TERMINATED BY 'string' ]

]
  4
  数据格式:
  "中华之子","100","威武的不行了"
  "大米","63","我爱吃"
  "苹果","15","好吃" 
     load data infile 'D:/aa.txt' ignore into table 表名 character set gbk fields terminated by ',' enclosed by '"' lines terminated by '\r\n' (表中的字段1,表中的字段2,表中的字段3);  
     terminated by ','  用什么风格字符
     enclosed by '"'    字符用什么包起来的
     lines terminated by '\r\n'   行的末尾换行符是什么(liunx改为\n)

[ IGNORE number LINES ]

[ (col_name_or_user_var,...) ]

[ SET col_name = expr,...] ]

5IGNORE number LINES选项可被用来忽略在文件的某一行

假设数据文件如下:
 
      Book1.csv

编号,名称,说明
        1,测试数据1,"测试CSV文件中,有逗号"
        2,测试数据2,"测试CSV文件中有""双引号"""
        3,测试数据3,"测试CSV文件中,有逗号和""双引号"""
        4,测试数据4,普通数据
 
        mysql> CREATE TABLE Test_Book1 (
            ->   id    int,
            ->   name  VARCHAR(10),
            ->   data  VARCHAR(100)
            -> );
        Query OK, 0 rows affected (0.05 sec)
         
         
        下面的 lines terminated by '\r\n' 是 要求换行符号,为 windows的换行
        下面的 ignore 1 lines是 忽略第一行的标题行。
        mysql> LOAD DATA INFILE 'f:/Book1.csv'
            -> INTO TABLE Test_Book1
            -> FIELDS TERMINATED BY ','
            -> OPTIONALLY ENCLOSED BY '"'
            -> lines terminated by '\r\n'
            -> ignore 1 lines
            -> (id, name, data);

mysql> select * from test_book1;
        +------+-----------+--------------------------------+
        | id   | name      | data                           |
        +------+-----------+--------------------------------+
        |    1 | 测试数据1 | 测试CSV文件中,有逗号           |
        |    2 | 测试数据2 | 测试CSV文件中有"双引号"        |
        |    3 | 测试数据3 | 测试CSV文件中,有逗号和"双引号" |
        |    4 | 测试数据4 | 普通数据                       |
        +------+-----------+--------------------------------+

ignore 1 lines 忽略第一行的标题行。
  
  6@dummy的使用
    假设数据文件如下:
 
    Book1.csv

1,测试数据1,"测试CSV文件中,有逗号"
      2,测试数据2,"测试CSV文件中有""双引号"""
      3,测试数据3,"测试CSV文件中,有逗号和""双引号"""
      4,测试数据4,普通数据

mysql> CREATE TABLE Test_Book1 (
            ->   id    int,
            ->   name  VARCHAR(10),
            ->   data  VARCHAR(100)
            -> );
      Query OK, 0 rows affected (0.05 sec)
    我只需要第一,二列的数据的时候
      mysql> LOAD DATA INFILE 'f:/test_main.txt'
          -> INTO TABLE test_main6
          -> FIELDS TERMINATED BY ','
          -> OPTIONALLY ENCLOSED BY ''''
          -> (id,name, @dummy);

mysql> select * from test_book1;
        +------+-----------+--------------------------------+
        | id   | name      | data                           |
        +------+-----------+--------------------------------+
        |    1 | 测试数据1 |                                |
        |    2 | 测试数据2 |                                |
        |    3 | 测试数据3 |                                |
        |    4 | 测试数据4 |                                |
        +------+-----------+--------------------------------+

这里的关键点, 在于那个   @dummy。
        对你而言, 如果文件有 10列, 你只导 2 , 7 的话, 那就是
          @dummy,列2,@dummy,@dummy,@dummy,@dummy,列7,@dummy,@dummy,@dummy

7set子句
      SET 子句可以提供不是来源于输入文件的值。下面的语句将column3 设置为当前的日期和时间:
          LOAD DATA INFILE 'file.txt'  
          INTO TABLE t1  
          (column1, column2)  
          SET column3 = CURRENT_TIMESTAMP;  
      可以让某一列的值参与一些操作
          LOAD DATA INFILE 'file.txt'  
          INTO TABLE t1  
          (column1, @var1)  
          SET column2 = @var1/100;  
      也可以让前后列的数据产生关系(假设第一列是一个日期格式的数据,我的第三列可以根据第一列的日期计算出星期信息然后存入数据库)
          LOAD DATA INFILE 'file.txt'  
          INTO TABLE t1  
          (column1, column2)  
          SET column3 = SET name=CASE WHEN DATE_FORMAT(date,'%w') =1 THEN "星期一" 
                                      WHEN DATE_FORMAT(date,'%w') =2 THEN "星期二" 
                                      end;

使用列/变量列表和SET子句要受到一下限制:
        • SET 子句中的赋值列名应当只能在赋值操作符的左边。
        • 在SET 赋值语句中,可以使用子查询。此查询返回一个将被赋予列的值,它可能仅仅是一个标量查询。不能用子查询去查询将被导入的表。
        • 对于列/变量列表或SET 子句,由于使用IGNORE 子句而被忽略的行就不会被处理。
        • 由于用户变量没有显示宽度,当导入的数据是行固定格式时,将不能使用用户变量。

8设置存入时候使用的字符

gbk  utf8

load data infile 'C:\\Users\\edgewalk\\Desktop\\test.txt' ignore into table test character set gbk fields terminated by ','
lines terminated by '\n' (
date,
money,
desctipt
)

2使用load data infile导入导出备份数据

如果要导出一个表中的部分字段或者部分符合条件的记录,需要用到了mysql的into outfile 和 load data infile 。 例如下面的mysql命令是把select的mytable表中的数据导出到C:\\Users\\7q\\Desktop\\test1.txt。
  select * from test into outfile 'C:\\Users\\7q\\Desktop\\test1.txt' fields terminated by ','  lines terminated by '\r\n' ;

假如要导入刚才备份的数据,可以使用load file方法,例如下面的mysql命令,把导出的数据导入了mytable_bak的表中:
  load data infile 'C:\\Users\\7q\\Desktop\\test1.txt' into table mytable_bak fields terminated by ',' lines terminated by '\r\n';
  这种方法的好处是,导出的数据可以自己规定格式,并且导出的是纯数据,不存在建表信息,你可以直接导入另外一个同数据库的不同表中.

 

mysql的load data,高速将文本文件,插入数据库中的更多相关文章

  1. mysql 的load data infile

    LOAD DATA INFILE语句从一个文本文件中以很高的速度读入一个表中.如果指定LOCAL关键词,从客户主机读文件.如果LOCAL没指定,文件必须位于服务器上.(LOCAL在MySQL3.22. ...

  2. Mysql 命令 load data infile 权限问题

    [1]Mysql命令load data infile 执行权限问题 工作中,经常会遇到往线上环境mysql数据库批量导入源数据的场景. 针对这个场景问题,mysql有一个很高效的命令:load dat ...

  3. mysql 的load data infile要使用

    LOAD DATA INFILE从文本文件中读出的声明以极高的速度到表. 1.基本语法 LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'fi ...

  4. 【hibernate spring data jpa】执行了save()方法 sql语句也执行了,但是数据并未插入数据库中

    执行了save()方法  sql语句也执行了,但是数据并未插入数据库中 解决方法: 是因为执行了save()方法,也执行了sql语句,但是因为使用的是 @Transactional 注解,不是手动去提 ...

  5. 把QQ聊天记录插入数据库中

    最近在做毕设,其中一个环节是分析qq聊天记录,在分析之前需要先把qq聊天记录导出,然后存入数据库中,qq聊天记录导出后是文本文档,导出方式: 1.登录qq后,点击任意一个好友,查看与他的聊天记录,点击 ...

  6. SqlBulkCopy将DataTable中的数据批量插入数据库中

    #region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// <summary> /// 注意:DataTable中的列需要与数据库表中的列完全一致.// ...

  7. 多线程查询数据,将结果存入到redis中,最后批量从redis中取数据批量插入数据库中【我】

    多线程查询数据,将结果存入到redis中,最后批量从redis中取数据批量插入数据库中 package com.xxx.xx.reve.service; import java.util.ArrayL ...

  8. MySQL基础之---mysqlimport工具和LOAD DATA命令导入文本文件

     1.mysqlimport工具的使用 看一下命令的使用方法: shell > mysqlimport -u root -p [--LOCAL] DBname File [option] --f ...

  9. JDBC使用MYSQL的LOAD DATA LOACAL INFILE和LOAD DATA INFILE

    MYSQL的LOAD方法都必须建立在mysql服务允许使用该命令的情况下: 开启该命令的方法: 1.在实例对应的my.cnf(windows为my.ini)中添加一行local-infile=1(默认 ...

随机推荐

  1. Python全栈工程师(异常(高级)、运算符重载)

    ParisGabriel              每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰    开局一张图 Python人工智能从入门到精通 对象的属性管理函数: getattr ...

  2. 孤荷凌寒自学python第二十七天python的datetime模块及初识datetime.date模块

    孤荷凌寒自学python第二十七天python的datetime模块及初识datetime.date模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.datetime模块 dateti ...

  3. mysql中查询常用的关键字

    最简单的查询: 1 select * from [where ] 1 select column1,column2....from [where] 这里需要注意的是where子句中条件过滤使用到的关键 ...

  4. Virtual box 虚拟机 不可使用的一种解决方法

    在win7下开着一个ubuntu虚拟机,写了好几小时代码,然后饿了,去吃点东西 回来发现,电脑由于win7 自动更新已经重启 ubuntu下的代码我已经走开时保存过了,所以不怎么担心 但是打开virt ...

  5. Hibernate 查询方法

    1.简单查询: public User select(User user) { User newUser; try { newUser = (User) session.get(User.class, ...

  6. [AT2698] Don't Be a Subsequence

    题目大意:给定一个字符串,求一个最短的串要求没有在该字符串的子串中出现过,如果有多个,输出字典序最小的那一个. 题解:倒着跑一遍原字符串(以下编号为$1\sim n$),按出现了所有$26$个字母来分 ...

  7. SPOJ - BALNUM Balanced Numbers

    题意: 求出所给范围内满足其数位上的奇数出现偶数次,数位上的偶数出现奇数次(或不出现)的数的个数. 思路: 对于0 ~ 9 每个数有3种情况. 1.没出现过 2.出现奇数次 3.出现偶数次 那么就可以 ...

  8. [解决方案]未能找到路径“~\bin\roslyn\csc.exe”的一部分

    我的WebApi项目使用Nuget加载了一些包以后出现了这样的问题,本地可以访问,但发布到线上后,出现这样的报错 这个问题出现的原因是Nuget的时候,多加载了一些项目可能不需要的依赖库所导致的. 解 ...

  9. python装饰器(整理版)

    Python中函数有一个装饰器的概念,今天,看核心编程中的函数一章的时候接触到了这个概念,炸一看来,讲的说明真实不好明白.于是写下本篇以示说明,提供给迷糊者.希望能对一些人起到一定的帮助 装饰器的语法 ...

  10. web本地存储 sessionStorage 和 localStorage

    1.sessionStorage  临时存储 为每一个数据源维持一个存储区域,在浏览器打开期间存在,包括页面重新加载. 2.localStorage 长期存储 与sessionStorage一样,但在 ...