golang mysql in ?_Golang MySQL LOAD DATA LOCAL INFILE 使用

在往 MySQL 写入大量数据时直接 insert 效率太低,应该使用 MySQL 的 LOAD DATA LOCAL INFILE。

Golang 的 MySQL 驱动 https://github.com/go-sql-driver/mysql 支持这个用法,有用到的朋友可以参考如下代码:

db, err := sql.Open("mysql", conf.DB)

byts := &bytes.Buffer{}

for _, pv := range stat {

line := strings.Join([]string{"field1-data", "field2-data"}, "\x1F")

byts.WriteString(line)

byts.WriteString("\x1E")

}

mysql.RegisterReaderHandler("data", func() io.Reader {

return io.Reader(byts)

})

_, err = db.Exec(`LOAD DATA LOCAL INFILE 'Reader::data' INTO TABLE t_pvlogs

CHARACTER SET UTF8

FIELDS TERMINATED BY X'1F'

LINES TERMINATED BY X'1E'

(field1, field2);`)

if err != nil {

fmt.Println(err)

return

}

err = db.Close()

if err != nil {

fmt.Println(err)

return

}

其中:

在 import 包的时候不要用 _,因为要直接使用 MySQL 包

设置了字段分隔符为 \x1F,行分隔符为 \x1E

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值