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 -T
或者使用客户端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
语句给服务器。选项
表示--
localmysqlimport
将从客户端主机上读取数据文件。如果客户端和服务端之间的网速不好,可以指定
选项压缩数据来获取更高的效率。--
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
,即无法加载客户端本地文件。