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 NAMES和character_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;
IGNORE number LINES选项
IGNORE number LINES选项可以被用于在文件的开始处忽略行。
您可以使用IGNORE 1 LINES来跳过一个包含列名称的起始标题行:
LOAD DATA INFILE '/tmp/test.txt' INTO TABLE test IGNORE 1 LINES;
REPLACE和IGNORE
有些输入记录把原有的记录复制到唯一关键字值上。REPLACE和IGNORE关键字用于控制这些输入记录的操作。
如果您指定了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’。
STARTING LINES选项
如果所有您希望读入的行都含有一个您希望忽略的共用前缀,则您可以使用'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)。
TERMINATED LINES选项
如果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, TEXT或ENUM)的列中的值.
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字符进行转义。
转自 http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#load-data
相关推荐
当MySQL服务器的LOAD突然升高时,这通常意味着服务器正在承受过大的压力,可能由多种因素引起。以下是针对描述中提到的五种情况的详细解释和解决方法: 1. **全表扫描的SQL语句**: 当查询没有利用到索引,导致...
为了更好地管理和操作存储在服务器上的文件,MySQL提供了`load_file()`函数,使得用户能够直接在查询语句中读取指定路径下的文件内容,并将其作为二进制数据返回。这一功能对于需要与文件系统交互的应用场景非常有用...
### 知识点一:MySQL `LOAD_FILE()` 函数 `LOAD_FILE()` 是 MySQL 中一个非常有用的函数,它允许用户从服务器文件系统加载二进制数据到数据库中。此函数通常用于查询语句中,可以返回指定文件的内容作为字符串。其...
根据提供的文件片段内容,我们可以看出这是一篇关于在MYSQL注入攻击中如何进一步利用load_file()函数的文章。load_file()是一个MySQL数据库中的函数,它允许读取服务器上的文件并返回文件内容作为字符串。在某些情况...
以下是从标题“mysql常用基础操作”及描述“mysql数据库的基本操作,后台的操作命令”中提炼出的关键知识点,涵盖了一系列重要的MySQL基本操作命令。 ### MySQL启动与管理 - **启动MySQL服务**:`/etc/init.d/...
在MySQL数据库中,`LOAD DATA INFILE` 是一个非常实用的命令,用于快速地将大量数据从文本文件导入到表中。...在实际操作中,还可以参考MySQL的手册和相关教程,了解更多关于`LOAD DATA INFILE`的高级用法和技巧。
### MySQL主从配置操作详解 #### 一、MySQL服务器复制配置背景 MySQL的主从复制是一种常见的高可用性和数据冗余解决方案。通过设置一个主服务器(Master)和一个或多个从服务器(Slave),可以实现数据的实时同步...
MySQL 8.0 是当前广泛使用的开源关系型数据库管理系统,其参考手册教程为用户提供了一步一步的学习路径,帮助用户从零开始掌握MySQL的基本操作。在本教程中,我们将深入探讨几个关键知识点,包括如何使用mysql客户端...
**Excel VBA 操作 MySQL** \- **准备工作** 在使用Excel VBA操作MySQL数据库之前,首先需要确保已正确地安装了必要的组件。这包括MySQL服务器、ODBC驱动(myODBC for MySQL)以及具备对ADO对象的支持。以下是安装和...
在本"mysql操作大全"中,我们将深入探讨MySQL的基本概念、安装与配置、数据类型、表的操作、查询语言、索引、事务处理、视图、存储过程、触发器以及备份与恢复等关键知识点。 一、MySQL基础 MySQL采用SQL(结构化...
MySQL中的`LOAD DATA INFILE`语句是一种高效的方法,用于批量导入数据到数据库表中,尤其在需要处理大量记录时,比逐条插入SQL语句更便捷。在本章中,我们将详细介绍`LOAD DATA INFILE`的基本语法、文件查找原则以及...
`LOAD DATA INFILE` 是 MySQL 数据库中一种高效的数据导入工具,它允许用户从外部文本文件快速批量导入数据到数据库的表中。相比于使用 `INSERT INTO` 语句逐条插入,`LOAD DATA INFILE` 在处理大量数据时速度显著更...
在本文中,我们将详细介绍MySQL数据库中Load命令的使用方法。Load命令是MySQL数据库管理中的一个重要工具,可以将文本文件中的数据导入到数据库表中。以下将分别对Load命令的使用场景、语法结构、参数选项以及注意...
MySQL是一种广泛使用的开源关系型数据库管理系统,其命令行工具提供了丰富的功能来管理和操作数据库。以下是一些关于操作MySQL数据库的常用命令的详细说明: 1. **连接MySQL**:使用`mysql -u 用户名 -p`命令可以...
MySQL图形化操作详解 MySQL是一种流行的开源关系型数据库管理系统,以其高效、稳定和易于使用而闻名。本篇文章将详细介绍如何快速上手MySQL的图形化操作。 首先,我们需要下载MySQL的相关软件。MySQL的官方主页是...
在本文中,我们将深入探讨如何使用MySQL命令来操作数据库,包括启动、重启、关闭MySQL服务,连接与退出数据库,修改密码,创建与删除用户,以及数据库和表的管理。此外,我们还将介绍数据的导入与导出操作。 首先,...
本教程将深入讲解MySQL的安装步骤以及数据操作的基础知识。 首先,我们来了解MySQL的安装过程。在Windows系统上,你可以从MySQL官方网站下载适合你系统的安装包。安装过程中,你需要选择“Custom”或“Developer ...
- `mysql> Load data local infile "mytable.txt" into table mytable;` 从文本文件`mytable.txt`中批量导入数据到表`mytable`。 15. **更新记录**: - `mysql> update mytable set birth = "1973-09-02" where ...