作者 罗小波
沃趣科技高级MySQL数据库工程师
load data语句详解
-
背景
-
数据库版本:MySQL 5.7.18
-
服务器信息:本地到处导入在10.10.30.241上演示,local远程导入在10.10.30.250上演示
-
数据库参数配置:
*
双一,secure_file_priv='',log-bin,binlog_format=row,隔离级别RC,sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
-
参考资料:https://dev.mysql.com/doc/refman/5.7/en/load-data.html
-
制造测试数据
1、语法解析
-
查看语法帮助信息
-

-
load data语句加载的数据源可以是mysqldump导出的纯文本数据文件,也可以是使用SELECT … INTO
OUTFILE
'/path/xx.txt';语句生成的单表纯文本数据文件,或者其他的方式生成的txt(只要生成的纯文本数据列按指定分隔符分割的纯文本数据文件即可)
-
从上面的帮助信息可以看到整个load data语句的语法结构,其中load data infile 'file.txt' into table tb_name; 是最基本的使用语句结构,其余的都为可选子句
1.1. 必选子句或关键字
-
-
如果文本文件中的数据字段与表结构中的字段定义顺序不同,则使用如下语句指定载入表中的字段顺序
-
1.2. 可选子句或关键字
-
以下演示部分只针对部分子句或关键字做演示,并不是全部,悉知
1.2.1. LOW_PRIORITY关键字
1.2.2. LOCAL关键字
1.2.2.1. 使用与不使用local关键字的流程
-
如果要载入的文本文件不在mysql server数据库本身的本地磁盘,客户端也不是从mysql
server本机登录的,则需要使用local关键字,指定mysql server从client host本地加载该文件,需要mysql
server端使用local_infile=true(或者设置为1,不设置时默认为1)启动,以及客户端连接mysql
server时也使用local_infile=true(或者设置为1,不指定时默认为1)连接才能使用,server和client必须都开启这个参数才能使用local关键字,任意一个关闭都不能使用
-
-
1.2.2.2. 使用local关键字的错误处理
-
使用LOCAL会影响错误处理行为:
-
使用LOAD DATA INFILE,数据解析碰到重复键时默认情况下会终止操作
-
-
使用LOAD DATA LOCAL INFILE,数据解析碰到重复键时将发出警告,并且操作继续进行,因为server端无法在客户端操作期间停止传输文件。此时处理重复键与指定IGNORE关键字相同(即忽略主键冲突的数据行)
-
1.2.3. REPLACE与IGNORE关键字
-
-
-
也可以使用IGNORE关键字忽略冲突的行(注意,这里的ignore与ignore number lines子句中的ignore作用不同,不要搞混淆)
-
-
1.2.4. PARTITION子句
1.2.5. CHARACTER SET charset_name子句
-
导入的文本数据文件名必须以文字字符串形式给出。在Windows上,在路径名称中指定反斜杠为正斜杠或双倍反斜杠。 character_set_filesystem系统变量控制文件名的解释
-
服务器使用由character_set_database系统变量指定的字符集来解释文件中的内容。SET
NAMES语句和character_set_client系统变量的设置不影响文件内容的字符集解析。如果输入文件的内容使用的字符集与server的默认值字符集不同,则建议先使用load
data的CHARACTER SET子句指定解析文本文件内容的字符集
-
LOAD DATA
INFILE将文件中的所有字段以相同的字符集进行解析,而不管加载字段列的数据类型定义的字符集如何。为了正确解释文件内容,您必须确保使用正确的字符集进行导出数据和导入数据。例如,如果您使用mysqldump
-T或通过在mysql中执行SELECT … INTO
OUTFILE语句导出数据文件时,建议使用–default-character-set选项指定一个对应数据的字符集,以便使用Load
data语句导入数据时不会发生字符集错乱(使用mysqlimport的–default-character-set指定导出数据时的字符集,使用mysql命令行客户端的–default-character-set指定导出数据时的字符集,注:不能指定ucs2,utf16,utf16le或utf32字符集来加载数据文件)
-
本小节不做演示,更多信息参考链接:https://dev.mysql.com/doc/refman/5.7/en/load-data.html
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28218939/viewspace-2139664/
,如需转载,请注明出处,否则将追究法律责任。