mysql语句之load data

血红的双手。 提交于 2020-01-18 21:56:14

语法:

load data

[low_priority]

[local]

infile 'file_name'

[replace | ignore]

into table 'table_name' 

[fields [terminated by 'char'] [OPTIONALLY] enclosed by 'char'] [escaped by 'char'] ]

[lines terminated by 'string']

[ignore number lines]

[(col_name, ...)]

其中:

low_priority 选项表示,MySQL将会等到没有其他人读这个表的时候,才把数据插入。

local选项表示,从客户端主机获取文件。如果不使用local,则在服务器端获取。

‘file_name’文件的路径可以是绝对路径,也可以是相对路径,相对路径是相对于mysql的根目录。

replace | ignore 选项,表示在发生唯一键冲突的时候的策略,是替换还是跳过

fields terminated by 'char' 可以指定字段之间的分隔符,默认情况下是tab字符(\t)

fields [OPTIONALLY] enclosed by 'char' 描述的是字段的括起字符。

fields escaped by 'char' 描述的转义字符。默认的是反斜杠: \ 

lines terminated by 'string' 指定每条记录的分隔符默认为"\n" 即为换行符

ignore n lines 指定忽略文件的前n行数据

col_name, ... 可以按指定的列把文件导入到数据库中

 

使用过程遇到的问题记录:

1. 

Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

如上描述,我们可以打开在mysql使用show variables like '%secure%' 查看mysql的secure_file_priv变量。

  1. secure_file_priv为null    表示不允许导入导出
  2. secure_file_priv指定文件夹时,表示mysql的导入导出只能发生在指定的文件夹
  3. secure_file_priv没有设置时,则表示没有任何限制

可以在mysql根目录下的my.ini中设置该变量为secure-file-priv=""

2.sql injection violation

如果你发现这个异常,并且 你的sql 在mysql执行没问题,就要考虑是不是druid防火墙把你sql拦截了,如果你配置了防火墙,可以关闭试试。将DataSource文件<property name="filters" value="stat,wall,log4j2"/> 中wall 去掉

3.no space left on device./ table 'Xxx' is full.

mysql在使用load data导入大量数据的时候,会产生大量bin_log日志,这时候你需要考虑是不是磁盘空间不足,或者日志文件太多。

4.Communicate Link failure.

sql timeout

在使用load data导入较大的文件的时候,可能会出现,由于mysql需要从客户端拉取待导入的文件到服务器端,可能是由于单个文件太大而导致的超时连接中断。可以尝试将大文件分成多个小文件进行导入

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!