mysql load data infile_MySQL LOAD DATA LOCAL INFILE快速插入大量数据

一.原理介绍

LOAD DATA LOCAL INFILE 是MYSQL JDBC 中自带的从文件读入数据,快速插入数据库的方法 ,通过执行满足第二部分所示的语法结构的sql语句,即可完成操作。在python中,可以使用pymysql中的cursor.excute()方法执行该sql语句。这将在第四部分中给出实例。

二.语法介绍

LOAD DATA

[LOW_PRIORITY | CONCURRENT] [LOCAL]

INFILE 'file_name'

[REPLACE | IGNORE]

INTO TABLE tbl_name

[PARTITION (partition_name [, partition_name] ...)]

[CHARACTER SET charset_name]

[{FIELDS | COLUMNS}

[TERMINATED BY 'string']

[[OPTIONALLY] ENCLOSED BY 'char']

[ESCAPED BY 'char']

]

[LINES

[STARTING BY 'string']

[TERMINATED BY 'string']

]

[IGNORE number {LINES | ROWS}]

[(col_name_or_user_var

[, col_name_or_user_var] ...)]

[SET col_name={expr | DEFAULT},

[, col_name={expr | DEFAULT}] ...]

该LOAD DATA语句以非常高的速度将文本文件中的行读入表中。 LOAD DATA是补充 SELECT ... INTO OUTFILE。要将表中的数据写入文件,请使用 SELECT ... INTO OUTFILE。要将文件读回表中,请使用 LOAD DATA。两个语句的FIELDS和LINES子句的语法 相同。

更多的相关内容,大家可以参照官网

三.数据分隔符

fields关键字指定了文件记段的分割格式,如果用到这个关键字,MySQL剖析器希望看到至少有下面的一个选项:

terminated by 描述字段的分隔符,默认情况下是tab字符(\t)

enclosed by 描述的是字段的括起字符。

escaped by 描述的转义字符。默认的是反斜杠(backslash:\ )

lines 关键字指定了每条记录的分隔符默认为’\n’即为换行符 (不指定一个lines子句,缺省值默认写的如: lines terminated by’\n’)

[IGNORE number LINES] 忽略特定行数,CSV文件可以忽略掉第一行标题

四.实例

1.python pymysql执行简单的LOAD DATA LOCAL INFILE实例

import pymysql

mydb = pymysql.connect("ip","user", "password", "dbname",3306,local_infile=1)

mydb.set_charset('utf8')

mycursor = mydb.cursor()

mycursor.execute("select table_name from information_schema.tables where table_schema='huazhu';")

myresult = mycursor.fetchall() # fetchall() 获取所有记录

for x in myresult:

file_name="D:/Cipher/huazhu20201130/data/dat/"+x[0]+".dat"

sql="LOAD DATA LOCAL INFILE '"+file_name+"' INTO TABLE "+x[0]+" FIELDS TERMINATED BY '|';"

print(sql)

mycursor.execute(sql)

mydb.commit() # 数据表内容有更新,必须使用到该语句

print(mycursor.rowcount, "记录插入成功。")

2.复杂的LOAD DATA LOCAL INFILE实例

LOAD DATA LOCAL INFILE 'F:\\milo.csv' INTO TABLE test

FIELDS TERMINATED BY ','

ENCLOSED BY '"'

LINES TERMINATED BY '\r\n'

IGNORE 1 LINES

(id, name)

五.速度对比

经过测试插入1w条数据时候与拼装批量插入语句时间差别不大,当插入数量达到10w出现了明显的时间差:

拼装批量插入语句花费时间:6.83s

LOAD DATA LOCAL INFILE实现大批量插入花费时间:1.23s

当表格的字段更多数据量更大出现的时间差就越大。

总结:当需要进行大批量数据插入的时候,可以优先考虑LOAD DATA LOCAL INFILE实现方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值