新萄京计算机网络

 新萄京计算机网络     |      2019-12-12

处理选项: 

   [FIELDS

 

   [REPLACE | IGNORE]

双引号包围的字段。如果文件中的行由换行符终止,下面显示的命令说明你将用来装载文件的字段和行 

  注意:

"2","a string containing a , comma","102.20" 

如果输入的记录行有太多的字段,多余的字段将被忽略,并增加警告的数目。

FIELDS TERMINATED BY ',' ENCLOSED BY '"' 

•     固定尺寸的记录行(FIELDS TERMINATED BY 和FIELDS ENCLOSED BY 均为空)和BLOB 或TEXT 列。

 

参考管理员手册中的GBase 提供的权限 。

mysql> LOAD DATA INFILE 'data.txt' INTO TABLE table2 

如果用户指定关键词LOW_PRIORITY,LOAD DATA 语句的执行将会被延迟,直到没有其它的客户端正在读取表。

 

FIELDS TERMINATED BY '"' ENCLOSED BY '"'

 

关于更多的 “” 转义语法信息,查看文字值 。

可能的结果是每个输入行将被解释为单个的字段。 

3,"a string containing a " quote",102.20

"1","a string","100.20" 

-> INTO TABLE persondata (col1,col2,...);

mysql> LOAD DATA INFILE 'data.txt' INTO TABLE table2 

只有在两种情况下TIMESTAMP 列被设置为当前日期和时间。一种情况时当列有一个NULL 值(也就是N)时;另一种情况是(仅对于第一个TIMESTAMP 列),当一个字段清单被指定时,TIMESTAMP 列会从字段清单中被略去。

"4","a string containing a ", quote and comma","102.20" 

当LOAD DATA INFILE 查询结束时,它返回信息字符串,格式如下:

 

•     在SET 赋值语句中,可以使用子查询。此查询返回一个将被赋予列的值,它可能仅仅是一个标量查询。不能用子查询去查询将被导入的表。

为了将由逗号分隔的文件读回来,正确的语句将是: 

LOAD DATA INFILE 'file.txt'

 

在一个字段值中出现的ENCLOSED BY 字符,通过用ESCAPED BY 字符作为其前缀对其转义。同时也要注意,如果用户指定一个空的ESCAPED BY 值,可能会产生不能被LOAD DATA INFILE 正确读出的输出文件。例如,如果转义字符为空,上面显示的输出将变成如下显示的输出。请注意第四行的第二个字段,它包含一个跟在一个引号后的逗号,看起来 像是一个字段的终止:

 

  INTO TABLE tbl_name

"3","a string containing a " quote","102.20" 

FIELDS TERMINATED BY 't' ENCLOSED BY '' ESCAPED BY '\'

LINES TERMINATED BY 'n';   -www.2cto.com-

sqlcli> SELECT * INTO OUTFILE 'data.txt'

FIELDS TERMINATED BY ',' 

  注意:

SELECT into outfile 备份数据库数据

  [TERMINATED BY 'string']

 

•     对于缺省的FIELDS 和LINES 值,输出时,NULL 被写成N,当读入时,N 被作为NULL 读入(假设ESCAPED BY 字符为 “”)。

 

sqlcli> LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name

相反,如果你试图用下面显示的语句读取文件,它不会工作,因为它命令LOAD DATA INFILE在字段之间 

-> INTO TABLE test IGNORE 1 LINES;

 

1,"a string",100.20

 

"2","a string containing a , comma","102.20"

为字段分隔符)显示在下面: 

 

 

 

FIELDS TERMINATED BY 't'; 

如果输入文件的字段顺序不同于表中列的顺序,用户也必须指定一个字段列表。否则GBase 不知道如何将输入字段与表中的列匹配。

寻找定位符: 

在某些情况下,字段与行处理相互作用:

 

   (column1, @var1)

 

sqlcli> LOAD DATA INFILE 'data.txt' INTO TABLE table2

 

用它读取包含有下面内容的文件:

任何字段或行处理选项可以指定一个空字符串('')。如果不是空,FIELDS [OPTIONALLY] ENCLOSED BY和 

•     对于日期和时间类型,列被设置为适合列类型的“零”值。参考日期和时间类型 。

LOAD DATA INFILE能被用来读取从外部来源获得的文件。例如,以dBASE格式的文件将有由逗号分隔并用 

•     不用任何引号字符封装字段。

select substring(boss,0,2),addr from guest; 

"3","a string containing a " quote","102.20"

过一个字符。例如,写入由回车换行符对(CR+LF)终止的行,或读取包含这样行的一个文件,指定一个 

LINES TERMINATED BY 'n' STARTING BY ''

 

•    

================= 

•     FIELDS [OPTIONALLY] ENCLOSED BY 字符 。

FIELDS ESCAPED BY值必须是一个单个字符。FIELDS TERMINATED BY和LINES TERMINATED BY值可以是超 

如果FIELDS ESCAPED BY 字符为空,那么将没有字符被转义并且NULL 值仍输出为NULL,而不是N。指定一个空的转义字符可能不是一个好的方法,特别是用户的数据字段值中包含刚才列表中的任何字符时。

 

1,"a string",100.20

mysql> LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name 

  注意:

FIELDS TERMINATED BY ',';   -www.2cto.com-

 这些规则意味着,一个以'/gsfile.txt' 给出的文件是从服务器的数据目录中读取的,然而,以`gsfile.txt' 给出的一个文件是从当前数据库的数据目录下读取的。举例来说,下面的LOAD DATA 语句从db1 数据库目录下读取文件'data.txt',因为db1 是当前数据库,即使语句明确把文件载入到db2数据库中的表里,也会从db1 目录中读取:

作者 huimai

   [ESCAPED BY 'char' ]

 

•     使用 “” 转义出现在字段值中的定位符、换行符或`' 字符实例。

into outfile 备份数据库数据 select email into outfile test.txt from email; select substring(boss,0,2),addr from guest; LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] I...

2,"a string containing a , comma",102.20

FIELDS [OPTIONALLY] ENCLOSED BY控制字段的包围字符。对于输出 (SELECT ... INTO OUTFILE),如果 

与服务器直接访问文件相比,使用LOCAL 速度稍微慢些,这是因为文件的内容必须通过客户端到服务器的连接传送。另一方面,对于本地文件,不需要获得FILE 权限。

 

•     ASCII 0 (实际上在转义字符后写上ASCII '0',而不是一个零值字节)。

insert into tabl(id,email) select id, email from guest;

为了将由逗号分隔的文件读回时,正确的语句应该是:

 

"The ""BIG"" boss" -> The "BIG" boss

 

 

 

2,"a string containing a , comma",102.20

mysql> SELECT * FROM table1 INTO OUTFILE 'data.txt' 

如果用户试图用下面所示的语句读取文件,它将不会工作,因为命令LOAD DATA INFILE 以定位符区分字段值:

你省略OPTIONALLY,所有的字段由ENCLOSED BY字符包围。对于这样的输出的一个例子(使用一个逗号作 

例如:

FROM ... 

关于INSERT 与LOAD DATA INFILE 的效率和提高LOAD DATA INFILE 速度的更多信息,参考管理员手册中的加速INSERT 语句 。

 

sqlcli> USE db1;

 

对于输入值,如果FIELDS ESCAPED BY 字符不是空字符,则出现这种字符时会被剥离,然后以下字符被作为字段值的一部分。例外情况是,被转义的‘0’或‘N’(例如, 或N,此时转义符为‘’)。这些序列被理解为ASCII NUL(一个零值字节)和NULL。用于NULL 处理的规则在本节的后部进行说明。

 

   INTO TABLE t1

select email into outfile "test.txt" from email; 

只有服务器和客户端都允许时,LOCAL 才可以工作。例如,如果kernel 启动时,--local-infile=0,则LOCAL 不能工作。参考管理员手册中的LOAD DATA LOCAL 的安全问题 。

 

下面的例子将装载persondata 表的所有列:

LINES TERMINATED BY 'r n'子句。  -www.2cto.com-

sqlcli> LOAD DATA INFILE 'data.txt' INTO TABLE table2

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL]  INFILE “/opt/abc.txt" INTO TABLE table_name     -www.2cto.com-  

FIELDS [OPTIONALLY] ENCLOSED BY 控制字段的引用。对于输出(SELECT ... INTO OUTFILE),如果用户省略单词OPTIONALLY,所有的字段被ENCLOSED BY 字符包围。这样的一个输出文件(以一个逗号作为字段分界符)示例如下:

FIELDS TERMINATED BY ',' (column1, column2,colum3); 

something xxx"Row",2

 

sqlcli> LOAD DATA INFILE 'data.txt' INTO TABLE db2.gs_table;

出于安全的原因,当读取位于服务器上的文本文件时,文件必须位于数据库目录下或者可以被所有用户读取。也就是说,当对服务器上的文件执行LOAD DATA INFILE 时,用户必须获得FILE 权限。

如果用户指定一个FIELDS 子句,它的子句 (TERMINATED BY、[OPTIONALLY] ENCLOSED BY 和ESCAPED BY) 也是可选的,不过,用户必须至少指定它们中的一个。

当用户一前一后地使用SELECT ... INTO OUTFILE 和LOAD DATA INFILE 将数据从一个数据库写到一个文件中,然后再从文件中将它读入数据库中时,两个命令的字段和行处理选项必须匹配。否则,LOAD DATA INFILE 将不能正确地解释文件内容。假设用户使用SELECT ... INTO OUTFILE 以逗号分隔字段的方式将数据写入到一个文件中:

一个空的字段值不同于字段值丢失的解释:

 

•     如果给定完整的路径,服务器使用该路径名。

为了写FIELDS ESCAPED BY '\',用户必须指定两个反斜线,该值会作为一个反斜线被读入。

•     将有 “” 开头的定位符、换行符或`' 解释为字段值的一个文字字符。

   SET column3 = CURRENT_TIMESTAMP;

LOAD DATA INFILE 是SELECT ... INTO OUTFILE 的反操作。参考SELECT 语法 。 使用SELECT ... INTO OUTFILE 将数据从一个数据库写到一个文件中。使用LOAD DATA INFILE 读取文件到数据库中。两个命令的FIELDS 和LINES 子句的语法是一样的。两个子句都是可选的,但是如果两个同时被指定,FIELDS 子句必须出现在LINES 子句之前。

   [SET col_name = expr,...]]

如果用户没有指定一个FIELDS 子句,缺省时如同使用下列语句:

对于输入,ENCLOSED BY 字符如果存在,它将从字段值的尾部被剥离。(不管OPTIONALLY 是否被指定,都是这样;对于输入解释,OPTIONALLY 不会影响它。)如果在ENCLOSED BY 字符前存在ESCAPED BY 字符,那么它将被解释为当前字段值的一部分。

    [TERMINATED BY 'string']

 

sqlcli> LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata;

 

则可以得到数据(“row”,1)和(“row”,2)。

LOAD DATA INFILE 'file.txt'

如果用户没有指定一个LINES 子句,缺省时如同使用下列语句:

3,"a string containing a " quote",102.20

•     如果FIELDS TERMINATED BY 和FIELDS ENCLOSED BY 值都是空的(''),那么一个固定行(无定界符) 格式将被使用。用固定行格式时,在字段之间不使用分隔符(但是用户仍然有一个行终结符)。列值的写入和读取使用列的“显示”宽度。例如,如果一个列被定义 为INT(7),列的值将使用7 个字符的字段被写入。对于输入,列值通过读取7 个字符来获得。

如果指定了IGNORE,与已存在行主键值重复的输入行将被跳过。如果不指定二者中的任一个,则操作行为将依赖是否指定了LOCAL 关键字。没有指定LOCAL,则如果发现有重复的键值,将产生一个错误,并忽略文本文件的其余部分。如果指定了LOCAL,则缺省的操作行为将与指定了IGNORE 的相同;这是因为,在操作过程中,服务器没有办法终止文件的传送。

如果用户指定OPTIONALLY,ENCLOSED BY 字符仅被用于包装诸如含有字符串类型的字段(诸如CHAR,BINARY,TEXT 或ENUM):

一些不能被LOAD DATA INFILE 支持的情况:

The ""BIG"" boss   -> The ""BIG"" boss

SET 子句可以提供不是来源于输入文件的值。下面的语句将column3 设置为当前的日期和时间:

FIELDS ESCAPED BY 控制如何写入或读出特殊字符。如果FIELDS ESCAPED BY 字符不是空的,它将被用于做为下列输出字符的前缀: