mysql语句之load data

语法:

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需要从客户端拉取待导入的文件到服务器端,可能是由于单个文件太大而导致的超时连接中断。可以尝试将大文件分成多个小文件进行导入

 

5.自增列

注意使用这种方式导入数据库时,自增列虽然时自增的,但是由于mysql不知道要导入多少条,所以往往导入之后自增列会跳空一段序号没有使用,比如自增列为10时,导入了一个文件100条,那么导入以后自增列增长可能不止100个,即可能>110了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值