如何实现88秒插入1000万条数据到MySQL数据库表

52次阅读
没有评论

共计 2405 个字符,预计需要花费 7 分钟才能阅读完成。

这篇文章将为大家详细讲解有关如何实现 88 秒插入 1000 万条数据到 MySQL 数据库表,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

我用到的数据库为,mysql 数据库 5.7 版本的

首先自己准备好数据库表

其实我在插入 1000 万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入 100 万条数据时候报错,控制台的信息如下:

com.mysql.jdbc.PacketTooBigException: Packet for query is too large (4232009 4194304). You can change this value on the server by setting the max_allowed_packet variable.

出现上面的错误是因为数据库表的 max_allowed_packet 这个配置没配置足够大,因为默认的为 4M 的,后来我调为 100M 就没报错了

set global max_allowed_packet = 100*1024*1024*

记住,设置好后重新登录数据库才能看的设置后的值

show VARIABLES like  %max_allowed_packet%

代码如下:

package insert;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Date;
import com.mysql.jdbc.PreparedStatement;
public class InsertTest { public static void main(String[] args) throws ClassNotFoundException, SQLException {
 final String url =  jdbc:mysql://127.0.0.1/teacher  ; 
 final String name =  com.mysql.jdbc.Driver  ; 
 final String user =  root  ; 
 final String password =  123456  ; 
 Connection conn = null ; 
 Class.forName(name); // 指定连接类型  
 conn = DriverManager.getConnection(url, user, password); // 获取连接  
 if (conn!= null ) { System.out.println(  获取连接成功  );
 insert(conn);
 } else { System.out.println(  获取连接失败  );
 }
 }
 public static void insert(Connection conn) {
 //  开始时间
 Long begin = new Date().getTime();
 // sql 前缀
 String prefix =  INSERT INTO t_teacher (id,t_name,t_password,sex,description,pic_url,school_name,regist_date,remark) VALUES   ;
 try {
 //  保存 sql 后缀
 StringBuffer suffix = new StringBuffer();
 //  设置事务为非自动提交
 conn.setAutoCommit( false );
 //  比起 st,pst 会更好些
 PreparedStatement pst = (PreparedStatement) conn.prepareStatement(   ); // 准备执行语句
 //  外层循环,总提交事务次数
 for ( int i = 1 ; i  = 100 ; i++) { suffix = new StringBuffer();
 //  第 j 次提交步长
 for ( int j = 1 ; j  = 100000 ; j++) {
 //  构建 SQL 后缀
 suffix.append(  (  + uutil.UUIDUtil.getUUID()+  ,  +i*j+  , 123456  +  , 男  +  , 教师  +  , www.bbk.com  +  , XX 大学  +  ,  +  2016-08-12 14:43:26  +  , 备注  +  ),  );
 }
 //  构建完整 SQL
 String sql = prefix + suffix.substring( 0 , suffix.length() - 1 );
 //  添加执行 SQL
 pst.addBatch(sql);
 //  执行操作
 pst.executeBatch();
 //  提交事务
 conn.commit();
 //  清空上一次添加的数据
 suffix = new StringBuffer();
 }
 //  头等连接
 pst.close();
 conn.close();
 } catch (SQLException e) { e.printStackTrace();
 }
 //  结束时间
 Long end = new Date().getTime();
 //  耗时
 System.out.println(  1000 万条数据插入花费时间  :   + (end - begin) / 1000 +   s  );
 System.out.println(  插入完成  );
 }
}

关于“如何实现 88 秒插入 1000 万条数据到 MySQL 数据库表”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计2405字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)