怎么实现mysql批量提交数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么实现mysql批量提交数据相关的知识,希望对你有一定的参考价值。

  操作方法如下:  1、首先需要在mysql管理工具上面新建一个表,也可以用mysql命令创建,表建立完成之后,需要将表中的字段名字告诉给填写excel表的人员。
  2、打开excel表,按照程序提供的字段填写相应的数据,需要跟程序提供的一样,其他的描述。.
  3、使用的mysql管理工具Navicatfor MySQL,打开工具,选择表所在的数据库,然后点击数据库名字,右键数据,出来下拉菜单选择import wizard ,有汉化版本的更明确.弹出一个选择界面,选择excel file文件。
  4、点击next(下一步),选择对应的excel文件就行,然后再下面选文件内容在哪一个sheet中,也就是内容写在excel什么地方,这点需要注意,也是关键的地方。
  5、点击next (此步骤也是关键步骤),需要注意2点: 1:filedname row 就是字段所在excel中的位置,也就是第几行(简单办法,一般就是英文对应的那一列).2:first data row(从哪一行开始执行),数据从哪一行开始。.
  6、点击next选择 targettable 目标对应的数据库,选择要导入到哪个数据库中表中。
  7、如果到上面一步没有问题的话,默认next到最后 就行了.然后打开表就能看到数据跟excel表中的一样。
参考技术A

使用事务提交,批量插入数据库,10W条提交,10分钟内。

echo date("H:i:s");
$connect_mysql->query('BEGIN');
$params = array('value'=>'50');
for($i=0;$i<2000000;$i++) 
$connect_mysql->insert($params);
if($i%100000==0)
$connect_mysql->query('COMMIT');
$connect_mysql->query('BEGIN');


$connect_mysql->query('COMMIT');
echo date("H:i:s");

本回答被提问者采纳

批量插入数据到 MySQL的几种方式

一.JDBC批量操作+事务提交

package com.sb.test;

import java.sql.*;
import java.util.Random;

/**
 * 批量操作+事务提交
 **/
public class JdbcInsertDataLess {
    private static String url = "jdbc:mysql://localhost:3306/TEST?characterEncoding=utf8&serverTimezone=GMT%2B8";
    private static String user = "root";
    private static String password = "root";

    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement pstm = null;
        ResultSet rt = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);
            String sql = "INSERT INTO person(pid,name) VALUES(?,CONCAT(\'姓名\',?))";
            pstm = conn.prepareStatement(sql);
            conn.setAutoCommit(false);
            Long startTime = System.currentTimeMillis();
            Random rand = new Random();
            int a, b;
            //插入100000条数据
            for (int i = 1; i <= 100000; i++) {
                pstm.setInt(1, i);
                pstm.setInt(2, i);
                //随机数
                a = rand.nextInt(10);
                b = rand.nextInt(10);
                pstm.setString(1, "188" + a + "88" + b);
                pstm.addBatch();
            }
            pstm.executeBatch();
            conn.commit();
            Long endTime = System.currentTimeMillis();
            System.out.println("************************正在插入中,请稍等******************************");
            System.out.println("批量插入用时:" + (endTime - startTime));
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally {
            if (pstm != null) {
                try {
                    pstm.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
            }
        }
    }
}

二.存储过程批量插入

DROP PROCEDURE IF EXISTS proc_initData;-- 如果存在此存储过程则删掉
DELIMITER $
CREATE PROCEDURE proc_initData()
BEGIN
    DECLARE i INT DEFAULT 1;
    WHILE i<=100000 DO
        INSERT INTO person VALUES(i,CONCAT(\'姓名\',i));
        SET i = i+1;
    END WHILE;
END $
CALL proc_initData();

三.使用UNION ALL来进行插入操作

INSERT INTO person(pid,NAME)
 SELECT 4,\'000\'
 UNION ALL
 SELECT 5,\'001\'
 UNION ALL
 SELECT 6,\'002\'
 
 
 
1INSERT INTO person(pid, name)
 VALUES(11, val12), 
 (21, val22),
 (31,val32) ;
 
 
2INSERT INTO person(pid, name) SELECT 333, val12 UNION ALL SELECT 33333, val22 union all select 444, val32 ;
这样的写法是属于复合SQL语句,表示先把两个SELECT的结果集进行无删减的联合,再把联合结果插入到TABLE中。

四.脚本插入数据

 

 

 

 insert.sql

INSERT INTO person(pid, name)
 SELECT 777,\'val12\'
 UNION ALL
 SELECT 88888888,\'val22\' 
union all
 select 88888, \'val32\' ;    

insertbatch.bat

#!/bin/bash
p="/tmp" //目录下全是sql文件
dbUser=\'root\'
dbPassword=\'root\'
dbName=\'hengda\'
cd $p;
for f in `ls $p/*.sql`
do
echo $f;
mysql -u $dbUser -p$dbPassword -f $dbName -e "source $f";
mv $f $f.done;
done
echo \'finished!\'

reradme.md

/tmp" ://目录下全是sql文件

 

以上是关于怎么实现mysql批量提交数据的主要内容,如果未能解决你的问题,请参考以下文章

百万级别数据批量插入 MySQL,哪种方式最快?

批量向MySQL导入1000万条数据的优化

批量插入数据到 MySQL的几种方式

批量插入数据到 MySQL的几种方式

Mysql批量导入

怎么能够批量自动提交网页登陆,自动填表输入?