`
k_lb
  • 浏览: 834080 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论
  • kitleer: 据我所知,国内有款ETL调度监控工具TaskCTL,支持ket ...
    kettle调度

MySQL load的语法

 
阅读更多
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 INFILE语句用于高速地从一个文本文件中读取行,并装入一个表中。文件名称必须为一个文字字符串。

character_set_database系统变量指示的字符集被用于解释文件中的信息。SET NAMEScharacter_set_client的设置不会影响对输入的解释。

典型的示例

LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE tbl_name 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n'


如果您只想载入一个表的部分列,则应指定一个列清单:

LOAD DATA LOCAL INFILE 'persondata.txt' INTO TABLE persondata (col1,col2);

文件的路径

如果指定了LOCAL,则被认为与连接的客户端有关:

  • 如果指定了LOCAL,则文件会被客户主机上的客户端读取,并被发送到服务器。文件会被给予一个完整的路径名称,以指定确切的位置。如果给定的是一个相对的路径名称,则此名称会被理解为相对于启动客户端时所在的目录。
  • 如果LOCAL没有被指定,则文件必须位于服务器主机上,并且被服务器直接读取。

当在服务器主机上为文件定位时,服务器使用以下规则:

  • 如果给定了一个绝对的路径名称,则服务器使用此路径名称。
  • 如果给定了带有一个或多个引导组件的相对路径名称,则服务器会搜索相对于服务器数据目录的文件。
  • 如果给定了一个不带引导组件的文件名称,则服务器会在默认数据库的数据库目录中寻找文件。

注意,这些规则意味着名为./myfile.txt的文件会从服务器数据目录中被读取,而名为myfile.txt的同样的文件会从默认数据库的数据库目录中读取。

从客户端使用绝对路径load数据

LOAD DATA LOCAL INFILE '/import/data.txt' INTO TABLE db2.my_table;

从服务器里使用相对路径load数据

下面的LOAD DATA语句会从db1数据库目录中读取文件data.txt,因为db1是当前数据库。即使语句明确把文件载入到db2数据库中的表里,也会从db1目录中读取。

USE db1;
LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table;

IGNOREnumberLINES选项

IGNOREnumberLINES选项可以被用于在文件的开始处忽略行。

您可以使用IGNORE 1 LINES来跳过一个包含列名称的起始标题行:

LOAD DATA INFILE '/tmp/test.txt'  INTO TABLE test IGNORE 1 LINES;

REPLACE和IGNORE

有些输入记录把原有的记录复制到唯一关键字值上。REPLACEIGNORE关键字用于控制这些输入记录的操作。

如果您指定了REPLACE,则输入行会替换原有行(换句话说,与原有行一样,对一个主索引或唯一索引具有相同值的行)。

如果您指定IGNORE,则把原有行复制到唯一关键字值的输入行被跳过。

如果您这两个选项都不指定,则运行情况根据LOCAL关键词是否被指定而定。不使用LOCAL时,当出现重复关键字值时,会发生错误,并且剩下的文本文件被忽略。使用LOCAL时,默认的运行情况和IGNORE被指定时的情况相同;这是因为在运行中间,服务器没有办法中止文件的传输。

索引的影响

如果您对一个空的MyISAM表使用LOAD DATA INFILE,则所有的非唯一索引会被创建在一个独立批中(对于REPAIR TABLE)。当您有许多索引时,这通常会使LOAD DATA INFILE大大加快。通常,LOAD DATA INFILE的速度会非常快,但是在某些极端情况下,您可以在把文件载入到表中之前使用ALTER TABLE...DISABLE KEYS关闭LOAD DATA INFILE,或者在载入文件之后使用ALTER TABLE...ENABLE KEYS再次创建索引,使创建索引的速度更快。

FIELDS和LINES的默认值

如果您不指定FIELDS子句,则默认值为假设您写下如下语句时的值:

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

如果您不指定LINES子句,则默认值为假设您写下如下语句时的值:

LINES TERMINATED BY '\n' STARTING BY ''

换句话说,当读取输入值时,默认值会使LOAD DATA INFILE按如下方式运行:
在新行处寻找行的边界。
不会跳过任何行前缀。
在制表符处把行分解为字段。
不希望字段被包含在任何引号字符之中。
出现制表符、新行、或在‘\’前有‘\’时,理解为作为字段值一部分的文字字符。

相反的,当编写输出值时,默认值会使SELECT...INTO OUTFILE按如下方式运行:

在字段之间写入制表符。
不把字段包含在任何引号字符中。
当字段值中出现制表符、新行或‘\’时,使用‘\’进行转义。
在行的末端写入新行。

注意,要写入FIELDS ESCAPED BY\\’,您必须为待读取的值指定两个反斜杠,作为一个单反斜杠使用。

备注:如果您已经在Windows系统中生成了文本文件,您可能必须使用LINES TERMINATED BY\r\n’来正确地读取文件,因为Windows程序通常使用两个字符作为一个行终止符。部分程序,当编写文件时,可能会使用\r作为行终止符。要读取这样的文件,应使用LINES TERMINATED BY\r’。

STARTINGLINES选项

如果所有您希望读入的行都含有一个您希望忽略的共用前缀,则您可以使用'prefix_string'来跳过前缀(和前缀前的字符)。如果某行不包括前缀,则整个行被跳过。注释:prefix_string会出现在一行的中间。

以下面的test.txt为文件源

xxx"row",1
something xxx"row",2

使用以下sql导入数据

LOAD DATA INFILE '/tmp/test.txt' INTO TABLE test LINES STARTING BY "xxx";

最后并只得到数据("row",1)("row",2)

TERMINATEDLINES选项

如果jokes被由%%组成的行分隔,要读取包含jokes的文件,您可以这么操作:

LOAD DATA INFILE '/tmp/jokes.txt' INTO TABLE jokes FIELDS TERMINATED BY '' LINES TERMINATED BY '\n%%\n' (joke);

TERMINATED,ENCLOSED,ESCAPED FIELD选项

TERMINATED用于控制字段的分隔符,可以为多个字符。

ENCLOSED BY用于用于控制字段的引号,必须为单一字符,如果您忽略了词语OPTIONALLY,则所有的字段都被包含在ENCLOSED BY字符串中,如果您指定了OPTINALLY,则ENCLOSED BY字符只被用于包含具有字符串数据类型(比如CHAR, BINARY, TEXTENUM)的列中的值.

SELECT...INTO OUTFILE导出数据,ENCLOSED BY '"',忽略OPTIONALLY

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

SELECT...INTO OUTFILE导出数据,ENCLOSED BY '"',指定OPTIONALLY

1,"a string",100.20

ESCAPED BY用于转义,FIELDS ESCAPED BY值必须为单一字符。

如果FIELDS ESCAPED BY字符为空字符,则没有字符被转义,并且NULL被作为NULL输出,而不是\N。去指定一个空的转义符不是一个好办法,特别是如果数据的字段值包含任何刚给定的清单中的字符时,更不能这么做。

如果在字段值内出现ENCLOSED BY字符,则通过使用ESCAPED BY字符作为前缀,对ENCLOSED BY字符进行转义。

分享到:
评论

相关推荐

    MYSQL 基础语法大全. 手动整理

    本资料主要涵盖了MySQL的基础语法,包括数据的增删改查、查询条件的使用、事务处理、字符集问题的解决、数据库的导入与导出以及用户权限管理和字符串拼接等核心概念。 1. **增删改查(CRUD)**: - **创建(Create...

    mysql语法文档

    mysql语法文档 mysql语法文档是mysql数据库管理系统的使用手册,涵盖了mysql的基本语法、C API编程接口等内容。本文档适合初学者学习mysql语法,也可以作为已经掌握mysql的开发者的一份参考手册。 mysql语法部分:...

    mysql语法大全精讲(中文版)

    MySQL是一种广泛使用的开源关系型数据库管理系统,其语法是SQL语言的基础。本篇"mysql语法大全精讲(中文版)"涵盖了MySQL中涉及的主要SQL语句,包括数据定义、数据操作、实用工具、事务处理和锁定、数据库管理、...

    MySQL基础语法与练习

    在这个“MySQL基础语法与练习”的主题中,我们将深入探讨MySQL的基础语法,并通过大量的练习来巩固你的理解。 一、MySQL安装与配置 在开始学习MySQL之前,你需要在你的计算机上安装MySQL。这通常可以通过下载并运行...

    MySQL常用语法

    根据提供的文件信息,我们可以总结出一系列关于MySQL的基本操作与常用语法知识点。这些知识点不仅适合有一定数据库基础的学习者快速上手,对于已经熟悉MySQL的人来说也是一个很好的复习资料。 ### MySQL登录与退出 ...

    MYSQL的sql语法学习

    MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),其SQL语法是学习数据库操作的基础。在本章中,我们将详细解析MySQL中对数据库、表、字段等命名规则,以及对数据库的操作、对表的操作、对表中记录的操作、...

    mysql load data infile 的用法.docx

    Mysql Load Data Infile 的用法 Mysql 的 Load Data Infile 语句是一个非常强大的工具,可以快速地将文本文件中的数据导入到 Mysql 数据库中。在本文中,我们将详细介绍 Load Data Infile 的用法,包括其语法、参数...

    Java利用MYSQL LOAD DATA LOCAL INFILE实现大批量导入数据到MySQL

    LOAD DATAINFILE语句的基本语法为:LOAD DATA [LOCAL] INFILE '文件路径' INTO TABLE 表名 FIELDS TERMINATED BY '分隔符' ENCLOSED BY '引号' LINES TERMINATED BY '换行符'。 在实际中,常常会遇到两类问题:一类...

    利用MySQL load_file函数获取服务器文件试验

    - **语法格式**:`LOAD_FILE(file_name)` - `file_name`:表示要加载的文件的绝对路径。需要注意的是,只有具有`FILE`权限的用户才能使用此函数。 - **示例**: ```sql SELECT LOAD_FILE('/var/lib/mysql/test....

    mysql load_file读freebsd目录.txt

    ### 知识点一:MySQL `LOAD_FILE()` 函数 `LOAD_FILE()` 是 MySQL 中一个非常有用的函数,它允许用户从服务器文件系统加载二进制数据到数据库中。此函数通常用于查询语句中,可以返回指定文件的内容作为字符串。其...

    MySQL中文教程及SQl语法

    MySQL提供了`mysqldump`工具进行数据备份,以及`mysqlimport`和`LOAD DATA INFILE`语句进行数据恢复。 通过深入学习本教程和提供的“MYSQL5.1CHM版中文帮助文档”,读者可以全面了解MySQL数据库的管理和SQL语言的...

    MySQL load语句详细介绍

    MySQL的`LOAD DATA INFILE`语句是一种高效的数据导入工具,它可以从文本文件快速地将数据加载到数据库表中。本篇文章将详细讲解`LOAD DATA INFILE`的使用方法、语法以及各种选项。 首先,`LOAD DATA INFILE`的基本...

    mysql遇到load data导入文件数据出现1290错误的解决方案

    理解`LOAD DATA INFILE`语法非常重要,数据文件需要按照特定格式排列,通常每行代表一个记录,每个字段之间用分隔符(如制表符或逗号)分隔。在本例中,数据文件`xueshengxinxi.txt`中的数据结构应该与表`tab_load_...

    mysql Load Data InFile 的用法

    `LOAD DATA INFILE` 是 MySQL 数据库中一种高效的数据导入工具,它允许用户从外部文本文件快速批量导入数据到数据库的表中。相比于使用 `INSERT INTO` 语句逐条插入,`LOAD DATA INFILE` 在处理大量数据时速度显著更...

    mysql LOAD语句批量录入数据

    MySQL中的`LOAD DATA INFILE`语句是一种高效的方法,用于批量导入数据到数据库表中,尤其在需要处理大量记录时,比逐条插入SQL语句更便捷。在本章中,我们将详细介绍`LOAD DATA INFILE`的基本语法、文件查找原则以及...

    MsSql数据导入MySql

    本案例中,我们探讨的是如何利用`LOAD DATA LOCAL INFILE`语句将MSSQL的数据高效地导入到MySQL中,并解决在数据迁移过程中可能遇到的问题。 首先,MSSQL和MySQL是两种不同的数据库管理系统,它们的数据存储格式和...

    mysql中的load命令使用方法

    在本文中,我们将详细介绍MySQL数据库中Load命令的使用方法。Load命令是MySQL数据库管理中的一个重要工具,可以将文本文件中的数据导入到数据库表中。以下将分别对Load命令的使用场景、语法结构、参数选项以及注意...

    mysql中造3千条数据(3种方法)

    load file 方式是使用 MySQL 的 load data 语句来快速生成大量数据。下面是一个使用 load file 方式生成 3000 条数据的示例: 1. 准备一个文本文件,例如 `abc.txt`,其中包含 3000 条数据。 2. 上传文本文件到 ...

Global site tag (gtag.js) - Google Analytics