千万行csv大文件快速导入mysql

最近尝试csv文件导入,因为之前太菜就用普通图形窗口导入,但是速度很慢,于是做了总结:

目前我这里一共两种方法:

1.窗口 mysql  workbench导入 (适用范围:对数据库不了,要导入的csv文件比较小,不超过1万行适用)【速度慢】

2.命令式导入      (适用范围:对数据库命令了解,要导入百万行大数据)【速度快】

一.图形化

图形化界面,找到电脑左下角的开始,找到wokbench 这个可视化软件,没有的是当初安装mysql没有下载他的可视化捆绑程序,自己可以百度解决。

 运行程序后,进入root

 在下图空白处右键,Create schema建立新的数据库

 然后找到刚刚建立的数据库左侧角标点击展开,在Table上鼠标右键,选择Table Data Import Wizard.

 选择csv文件路径,然后点击next

 然后下个页面以为我们没有创建表,所以他的默认选项是帮我们创建一个表,大家可以直接点击next

 然后再次点击next,他会帮我们选择列的类型,你也可以自己选,下方是预览情况

 继续点击next,再点击next完工,你会发现你创建的数据库表下已经有表了,记得手动刷新一下左侧列表,表才会出现。

 博主在导入时候,数据太多,导入过慢受不了了,于是使用了命令式导入。

二.命令式导入

测试100万行数据只用了13秒,首先在windows开始菜单栏找到mysql  8.0 Command Line Client

 点击进入会让输入密码,密码输错就会直接闪退,我就是这样,最后不得不卸载重新安装了mysql

然后开始输入命令

 首先输入

show variables like '%secure%';

然后回车,如果出现secure_file_priv=' ',恭喜你可以直接进行下一步,

如果里面出现了不为空,比如某些路径我的是在C:/Program Data/MySQL Server 8.0/Uploads/   注意这里的Program Data是隐藏文件夹,需要点击上方的查看隐藏文件夹才能看到,大家需要到mysql安装目录下修改my.ini文件,位置在下图,可以到桌面上创建修改好后,再拖拽过来。

注意:如果没有找到my.ini文件,这个文件大概率在上面输入的某些路径里面(橙色字体指代一个东西),可以顺着某些路径找到位置,我的就是这样,

my.ini添加文件内容如下:

secure_file_priv=''

 接下来重启一下mysql就行了。

回到刚刚的命令窗口

show variables like 'local_infile';

结果为off,需要改成on.

set global local_infile=on;

然后你需要对着这你的csv文件,在数据库里面新建个库database,然后在Table鼠标右键在里面create一张新表,我个人建议上面图形化方法让mysql帮你鉴定每一列的类型再对比创建表,不然后面导入一直报错。可能我对类型了解的不够深入。

接下来就是开始导入命令,这里有个建议,建议csv文件放到上面橙色某些路径的文件夹下,可以减少一些不必要的麻烦。

show databases;

查看所有的数据库

use 某某数据库;

选择数据库,下面换成你自己的csv文件地址

load data infile 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/1.csv' #换成自己地址
into table ship_info #换成你自己表名
fields terminated by','optionally enclosed by '"' escaped by '"'
lines terminated by '\r\n';

回车大功告成,你就可以回去刷新一下,看看有没有出现表。成功图如下。

可以使用Java的第三方库OpenCSV快速CSV文件导入MySQL数据库中。以下是一个简单的示例代码: ```java import com.opencsv.CSVReader; import java.io.FileReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class CsvToMysql { public static void main(String[] args) { String csvFile = "/path/to/file.csv"; // CSV文件路径 String databaseUrl = "jdbc:mysql://localhost:3306/mydatabase"; // 数据库连接URL String username = "myusername"; // 数据库用户名 String password = "mypassword"; // 数据库密码 try { // 连接到数据库 Connection connection = DriverManager.getConnection(databaseUrl, username, password); // 准备SQL语句 String sql = "INSERT INTO mytable (column1, column2, column3) VALUES (?, ?, ?)"; PreparedStatement statement = connection.prepareStatement(sql); // 读取CSV文件 CSVReader reader = new CSVReader(new FileReader(csvFile)); String[] nextLine; // 逐读取CSV文件,并将数据插入到数据库中 while ((nextLine = reader.readNext()) != null) { statement.setString(1, nextLine[0]); // 设置第1个参数 statement.setString(2, nextLine[1]); // 设置第2个参数 statement.setString(3, nextLine[2]); // 设置第3个参数 statement.executeUpdate(); // 执SQL语句 } // 关闭资源 reader.close(); statement.close(); connection.close(); System.out.println("导入成功!"); } catch (Exception e) { e.printStackTrace(); } } } ``` 在这个示例代码中,我们假设CSV文件有3列,分别对应数据库表中的3个列。通过逐读取CSV文件,并使用PreparedStatement来设置SQL语句的参数,将数据插入到数据库中。请注意,这个示例代码并没有考虑到CSV文件中可能存在的转义字符和特殊字符,如果需要处理这些问题,请查阅OpenCSV的文档。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值