LOAD DATA INFILE导入数据
语法:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE '' [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 命令中的默认值:
FIELDS TERMINATED BY ' ' ENCLOSED BY '' ESCAPED BY '\'
LINES TERMINATED BY '
' STARTING BY ''
文件参数:
LOCAL参数:
1、如果指定了LOCAL,则文件会被客户主机上的客户端读取,并被发送到服务器。文件会被给予一个完整的路径名称,以指定确切的位置。如果给定的是一个相对的路径名称,则此名称会被理解为相对于启动客户端时所在的目录。 2、如果LOCAL没有被指定,则文件必须位于服务器主机上,并且被服务器直接读取。
当在服务器主机上为文件定位时,服务器使用以下规则:
1、如果参数为绝对路径,则MySQL使用该绝对路径
2、如果参数为带目录的相对路径,则MySQL会相对于数据目录进行文件查找
3、如果参数为不带目录的文件名,则MySQL会在数据目录下进行文件查找
LOAD DATA LOCAL命令运行将本例文件加载到数据库中,存在安全问题,可以使用--local-infile=0来从服务器端禁用LOAD DATA LOCAL命令。
LOAD DATA LOCAL命令只能针对单个文件进行数据导入。
MYSQLIMPORT使用LOAD DATA INFILE的命令接口,可以使用--user-thread选项来设置导入数据的并发线程,其本质是同时执行多个LOAD DATA INFILE的命令。
LOAD DATA INFILE模板
如果文件使用MYSQLDUMP -tab 或SELECT INTO OUTFILE导出,那么可以使用LOAD DATA INFILE来导入。
常用导入模板:
LOAD DATA INFILE '/backup/TB001.txt' INTO TABLE TB001(id,c1) FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY ' ' IGNORE 0 LINES
执行SQL命令文件
对于包含SQL命令的文件,可以使用mysql命令执行,也可以在登录MySQL后使用source命令执行,建议使用mysql方式:
1、可以使用--force参数来控制是否出错后执行
2、可以使用--verbose参数输出执行结果,并将正常结果和异常结果分开存放,方便查看
如果使用source命令,中间命令执行失败后仍会继续执行后续命令,并很可能被后续执行结果“覆盖”导致错误被忽略
如果希望使用mysql命令来执行命令文件且想使用事务,可以在命令开始和命令结束添加"BEGIN"+“COMMIT”,然后将--force参数设置为False,当执行失败后会自动回滚并退出。
如果希望使用source命令来执行命令文件且想使用事务,不能在文件中使用"BEGIN"+“COMMIT”,需要在SOURCE命令外部使用"BEGIN"+“COMMIT”,在判断SOURCE执行结果后确定是COMMIT还是ROLLBACK。