load data infile函数使用

mysql中load data file 使用

欢迎进群交流: 363034250

前言

​ 有时候我们需要将大量数据批量写入数据库,直接使用程序语言和Sql写入往往很耗时间,其中有一种方案就是使用MySql Load data infile导入文件的形式导入数据,这样可大大缩短数据导入时间。

基本语法

load data  [low_priority] [local] infile 'file_name txt' [replace | ignore]
into table tbl_name
[fields
[terminated by't']
[OPTIONALLY] enclosed by '']
[escaped by'\' ]]
[lines terminated by'n']
[ignore number lines]
[(col_name,   )]

使用条件

  1. mysqld进程服务已经在运行;
  2. 要读取的文件须处于数据库目录或者可以被所有人读取;
  3. 需要有文件的file权限;

使用过程

本地服务器导入

load data infile "path" into tablename

效果图:

从远程客户端文本导入到服务器的数据库中

需要添加–local-infile = 1这个选项

mysql -h 172.17.0.2 -u root -p test --local-infile=1 -e "load data local infile './sql.txt' into table users";

-e 参数:可以执行各种sql语句的操作,需要将语句用引号包裹起来

-p 参数:需要输入服务器mysql的密码

-p 后面的test指定的是数据库名

效果图:

这样就写入到了test的users表中;

报错解决方法

  1. 如果出现这样的报错信息:

说明忘记在-e后面的sql语句中加上local,请看上面的正确的sql语句.

  1. linux下如果使用的是源码编译的mysql,在configure的时候,需要添加参数:–enable-local-infile 客户端和服务器端都需要,否则不能使用local参数

    ./configure --prefix=/usr/local/mysql --enable-local-infile
    make install
  2. 若是其它系统,可在配置文件中配置:

    在MySql 配置文件My.ini文件中下面项中加入local-infile=1:

    [mysqld]
    
    local-infile=1
    
    [mysql]
    
    local-infile=1

注意编码

若包含中文,请保证导入文件、连接字符串、导入表都是UTF-8编码

更多用法

  1. 如果你指定关键词low_priority,那么MySQL将会等到没有其他人读这个表的时候,才把数据插入。可以使用如下的命令:

    load data  low_priority infile "/home/mark/data sql" into table Orders;
  2. replace和ignore关键词控制对现有的唯一键记录的重复的处理。如果你指定replace,新行将代替有相同的唯一键值的现有行。如果你指定ignore,跳过有唯一键的现有行的重复行的输入。如果你不指定任何一个选项,当找到重复键时,出现一个错误,并且文本文件的余下部分被忽略。例如:

    load data  low_priority infile "/home/mark/data sql" replace into table Orders;

分隔符

  1. fields关键字指定了文件记段的分割格式,如果用到这个关键字,MySQL剖析器希望看到至少有下面的一个选项:
参数 描述
terminated by xx 意思是以什么字符作为分隔符, 默认情况下是tab字符(\t)
enclosed by xx 字段括起字符
escaped by xx 转义字符, 默认的是反斜杠(backslash:\ )

使用方法:

load data infile "/home/mark/Orders txt" replace into table Orders fields terminated by',' enclosed by '"';
  1. lines 关键字指定了每条记录的分隔符默认为’\n’即为换行符

如果两个字段都指定了,那么fields必须在lines之前。

使用方法:

load data infile "/jiaoben/load.txt" replace into table test fields terminated by ',' lines terminated by '/n';

参考链接

https://www.cnblogs.com/conanwang/p/6118731.html

猜你喜欢

转载自blog.csdn.net/hardhard123/article/details/80071574