MySQL Inport--导入数据

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 '\t' ENCLOSED BY '' ESCAPED BY '\\'
LINES TERMINATED BY '\n' 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 '\r\n'
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。

 

posted @ 2019-04-01 22:13  TeyGao  阅读(290)  评论(0编辑  收藏  举报