如何把csv文件批量导入到mysql数据库

如何把csv文件批量导入到mysql数据库,第1张

通过命令行导入(要求列与列之间以 英文逗号 分割,若字段中含有 , 则以 " 包裹)

load data infile 'D:/mysql-5.7.29-winx64/files/ratings_5.csv' into table ratings fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\r\n'

踩坑一:文件路径用 \ 分割会报错,用 / 可(用 \\ 应该也可)

踩坑二:load data 命令报错

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

在 my.ini 中加入(空字符串代表允许从一切目录导入)

[mysqld]

secure-file-priv=''

然后再 Windows 的服务中重新启动 mysql

踩坑三:csv 文件中第一行是诸如 userId 这样的列名

如果你的 csv 文件不大,直接使用 notepad++ 打开后删除第一行即可

但在我们这里,千万级别的文件 notepad++ 无法打开,这时可以考虑两种方法

1. 将 csv 文件传入 Linux 服务器删去第一行

由于不知道如何在 Win 10 中做这个 *** 作,只能通过 Linux 中转执行

sed -i '1d' ratings.csv

检验是否成功,可以打印出第一行观察

cat ratings.csv | head -n 1

2. 通过工具把大的 csv 分成多个 notepad 能够打开的较小文件,对第一个文件删除第一行并依次导入

工具:splitcsv

亲测 5000000 条数据的 csv 文件可以在 notepad++ 中打开(只能同时打开 3 个)

这个工具还有个小坑:ratings_0.csv 的最后一行和 ratings_1.csv 的第一行是重复的,请手动删除

1.导出本地数据库数据到本地文件

MySQL

-A

service_db

-h

your_host

-utest

-ptest

mysql>

select

*

from

t_apps

where

created>'2012-07-02

00:00:00'

into

outfile

/tmp/apps.csv

2.导出远程数据库数据到本地文件

mysql

-A

service_db

-h

your_host

-utest

-ptest

-ss

-e

"SELECT

*

from

t_apps

limit

300"

|

sed

's/\t/","/gs/^/"/s/$/"/s/\n//g'

>

apps.csv

(sed部分可略,尤其是处理包含汉字的数据时.

如果内容包含中文,可在select语句前加入set

names

utf8)

3.使用mysqldump导出远程或本地数据到本地文件

mysqldump

-h

your_host

-utest

-ptest

-w

"id<300"

service_db

t_apps

>

tt.sql

如果只导数据加上

-t

or

--no-create-

info

如果只导结构加上

-d

or

--no-data

4.

mysqldump不能指定导出的列,变通方法如下:

mysql

-u

USERNAME

--password=PASSWORD

--database=DATABASE

--execute='SELECT

`FIELD`,

`FIELD`

FROM

`TABLE`

LIMIT

0,

10000

'

-X

>

file.csv


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5897411.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-07
下一篇 2023-03-07

发表评论

登录后才能评论

评论列表(0条)

保存