LOAD DATA INFILE语句以非常高的效率从文本文件中读取行并插入到表中。导入的文件名必须以字符串格式给定。

LOAD DATA INFILE是SELECT ... INTO OUTFILE语句的后续操作。

要将表中数据写入到文件中,使用SELECT ... INTO OUTFILE语句。要将文件中的数据读回表中,使用LOAD DATA INFILE语句。这两个语句的 FIELDS和LINES子句是相同的。这些子句都是可选的,但如果同时指定了两者,则FIELDS子句必须写在LINES的前面。

load文件的时候,字符集由系统变量character_set_database指定。SET NAMES和character_set_client不会影响输入文件的解析。如果输入文件使用的字符集不同于默认值,一般需要使用CHARACTER SET子句指定所使用的字符集。binary字符集意味着不做任何字符集转换。

LOAD DATA INFILE按照字符集来解析文件中的所有字段,无论字段的数据类型是什么。为了能更正确地解析文件内容,必须保证数据写入到文件中的时候使用了正确的字符集。例如,如果使用mysqldump或者使用客户端mysql命令发起的SELECT ... INTO OUTFILE语句导出数据,请确保mysqldump或客户端mysql指定了选项--default-character-set。

如果使用了关键字LOW_PRIORITY,插入操作将会延迟,直到没有其他客户端读取该表。如果使用了关键字CONCURRENT,这表示LOAD DATA INFILE插入数据的时候将使用并发插入concurrent inserts。这两个关键字不允许同时指定。

注意:目前不能load字符集为ucs2的文件。

系统变量character_set_filesystem决定了解析文件名时使用的字符集。

从MariaDB 5.3开始,支持LOAD DATA INFILE时报告进度progress reporting。

你还可以使用mysqlimport工具来load数据;它会发送LOAD DATA INFILE语句给服务器。选项--local表示mysqlimport将从客户端主机上读取数据文件。如果客户端和服务端之间的网速不好,可以指定--compress选项压缩数据来获取更高的效率。

如果存储引擎支持ALTER TABLE ... DISABLE KEYS,则在LOAD DATA INFILE执行的时候会自动禁用索引,在数据导入结束后再自动启用索引。

Statements using LOAD DATA INFILE have not been considered safe for statement-based replication since MariaDB 5.5.

LOAD DATA INFILE语句会激活INSERT触发器。

如果系统变量local_infile设置为0,则无法执行LOAD DATA LOCAL,即无法加载客户端本地文件。