精华内容
下载资源
问答
  • mysql中一条insert语句批量插入多条记录

    万次阅读 多人点赞 2017-07-20 15:39:23
    插入语句常用写法: INSERT INTO items(name,city,price,number,picture) VALUES('耐克运动鞋','广州',500,1000,'003.jpg'); 这种方式只能够一次插入一条数据,要想插入多条数据,就得多次调用此sql语句,意味着多...

    插入语句常用写法:

    INSERT INTO items(name,city,price,number,picture)  VALUES('耐克运动鞋','广州',500,1000,'003.jpg');

    这种方式只能够一次插入一条数据,要想插入多条数据,就得多次调用此sql语句,意味着多次与数据库建立连接。但是这样一来,就会增加服务器的负荷,因为,执行每一次SQL服务器都要同样对SQL进行分析、优化等操作。幸好MySQL提供了另一种解决方案,就是使用一条INSERT语句来插入多条记录。这并不是标准的SQL语法,因此只能在MySQL中使用。

     

     一条INSERT语句插入批量数据的写法:

    INSERT INTO 
    
    [表名]([列名],[列名]) 
    
     VALUES
    
    ([列值],[列值])),
    
    ([列值],[列值])),
    
    ([列值],[列值]));

    可以看到,和原来的常规INSERT语句的区别,仅仅是在VALUES 后面增加值的排列,每条记录之间用英文输入法状态下的逗号隔开,是不是so easy。

    示例:

    INSERT INTO 
    
    items(name,city,price,number,picture) 
    
    VALUES
    
    ('耐克运动鞋','广州',500,1000,'003.jpg'),
    
    ('耐克运动鞋2','广州2',500,1000,'002.jpg');

    这样,就实现了一次性插入了2条数据。

    建议:

    在程序中,插入批量数据时,最好使用这种通过一条INSERT语句来一次性插入的方式。这样可以避免程序和数据库建立多次连接,从而增加服务器负荷。

     

    欢迎关注微信公众号(Java修炼记):

    专注Java技术积累,免费分享Java技术干货、学习笔记、学习资料等,致力于让这里成为一个java知识小站。

    展开全文
  • 批量插入

    万次阅读 2019-12-16 01:35:23
    注意: mysql服务器默认是关闭批处理的,我们需要通过一个参数,让mysql开启批处理的支持。将?rewriteBatchedStatements=true写在配置文件的url后面 使用更新的mysql 驱动:mysql-connector-java-5.1.37-bin.jar ...
    注意:
    1. mysql服务器默认是关闭批处理的,我们需要通过一个参数,让mysql开启批处理的支持。将?rewriteBatchedStatements=true写在配置文件的url后面
    2. 使用更新的mysql 驱动:mysql-connector-java-5.1.37-bin.jar

    1. 声明配置文件

    jdbc.properties
    user=root
    password=00000000
    url=jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true
    driverClass=com.mysql.jdbc.Driver
    

    2. 工具类

    JDBCUtils.java
    public class JDBCUtils {
        //获取数据库的连接
        public static Connection getConnection() throws Exception {
            //1.读取配置文件中的4个基本信息
            InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
            Properties properties = new Properties();
            properties.load(inputStream);
            String user = properties.getProperty("user");
            String password = properties.getProperty("password");
            String url = properties.getProperty("url");
            String driverClass = properties.getProperty("driverClass");
            //2.加载驱动
            Class.forName(driverClass);
            //3.获取连接
            return DriverManager.getConnection(url, user, password);
        }
        //关闭连接和Statement的操作
        public static void closeResource(Connection connection, Statement statement) {
            try {
                if(statement != null)
                    statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if(connection != null)
                    connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        //关闭资源操作
        public static void closeResource(Connection connection, Statement statement, ResultSet resultSet) {
            try {
                if(statement != null)
                    statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if(connection != null)
                    connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if(resultSet != null)
                    resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    

    3. goods表结构

    批量插入

    4. 测试代码

        @Test
    public void testInsert() {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        try {
            long start = System.currentTimeMillis();
            connection = JDBCUtils.getConnection();
            //设置不允许自动提交数据
            connection.setAutoCommit(false);
            String sql = "insert into goods(name) values(?)";
            preparedStatement = connection.prepareStatement(sql);
            for (int i = 1; i <= 1000000; i++) {
                preparedStatement.setObject(1, "name_" + i);
                //1."攒"sql
                preparedStatement.addBatch();
                if (i % 500 == 0) {
                    //2.执行batch
                    preparedStatement.executeBatch();
                    //3.清空batch
                    preparedStatement.clearBatch();
                }
            }
            //提交数据
            connection.commit();
            long end = System.currentTimeMillis();
            System.out.println("花费的时间为:" + (end - start)); //7983
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.closeResource(connection, preparedStatement);
        }
    }
    
    goods表

    在这里插入图片描述

    展开全文
  • MyBatis-Plus 批量插入

    万次阅读 热门讨论 2019-08-09 18:51:35
    spring boot+mybatis plus环境,单条插入用的是BaseMapper自带的insert方法 public ApiResult addAnc(Anc anc) { ApiResult result = new ApiResult(); Integer insert = ancMapper.insert(anc); if...

    spring boot+mybatis plus环境,单条插入用的是BaseMapper自带的insert方法

    public ApiResult addAnc(Anc anc) {
            ApiResult result = new ApiResult();
          
            Integer insert = ancMapper.insert(anc);
            if (insert < 1) {
                return result.failed("发布失败,请联系管理员");
            }
            return result.success(anc);
    

    BaseMapper未提供批量插入接口,但是在com.baomidou.mybatisplus.service.IService中提供了

    
        /**
         * <p>
         * 插入(批量),该方法不适合 Oracle
         * </p>
         *
         * @param entityList 实体对象列表
         * @return boolean
         */
        boolean insertBatch(List<T> entityList);
    
        /**
         * <p>
         * 插入(批量)
         * </p>
         *
         * @param entityList 实体对象列表
         * @param batchSize  插入批次数量
         * @return boolean
         */
        boolean insertBatch(List<T> entityList, int batchSize);
    

    使用方法,定义一个自己的接口,继承IService,泛型为被操作实体类

    
    @Service
    public  interface  WorkIService extends IService<CmpWork> {
    
    }
    
    

    定义一个实现类,实现上诉接口

    @Service
    public class WorkIServiceImpl extends ServiceImpl<WorkMapper, CmpWork> implements WorkIService{
    }
    

    其中WorkMapper为正常操作的mapper

    在业务中测试批量插入操作

    List<CmpWork> entityList = new ArrayList<>(1000);
    		for (int i=1;i<10000;i++){
                CmpWork work = new CmpWork();
    			work.setWorkName("workNametestBatch"+i);
    			work.setWorkID("testBatch"+i);
                work.setCreTm(DateUtil.dateToYMDHMS(new Date()));
    			entityList.add(work);
    		}
    		boolean b = workIService.insertBatch(entityList);
    

    和单条插入的执行对比了一下,在1000条数据级别内,差别不大,批量操作的优势可能大数据环境下才能显现吧




    都看到这了,应该帮到了你吧?

    ---->要不,稍做休息,陪我喝杯咖啡?<–

    展开全文
  • Oracle 批量插入(insert all into)

    万次阅读 多人点赞 2018-06-14 13:40:34
    项目需要用到导入excel表,并解析数据批量插入到oracle数据库中。 1)直接解析excel,循环行,拼了sql,executeUpdate。 执行一波… 咦,这效率很低啊,有多少行数据就执行了多少句sql,基本是一万行已经接近...

    mysql中,批量插入可以这么写:

    insert into my_table(field_1,field_2)
    values
    (value_1,value_2),
    (value_1,value_2),
    (value_1,value_2);
    

    oracle中不支持这么写,那在Oracle中,怎么通过一个insert语句批量插入数据呢?

    INSERT ALL 
    INTO my_table(field_1,field_2) VALUES (value_1,value_2) 
    INTO my_table(field_1,field_2) VALUES (value_3,value_4) 
    INTO my_table(field_1,field_2) VALUES (value_5,value_6)
    SELECT 1 FROM DUAL;
    

    补充:评论里提到的为什么要加 SELECT 1 FROM DUAL
    官方例子:

    INSERT ALL
       INTO sales (prod_id, cust_id, time_id, amount)
       VALUES (product_id, customer_id, weekly_start_date, sales_sun)
       INTO sales (prod_id, cust_id, time_id, amount)
       VALUES (product_id, customer_id, weekly_start_date+1, sales_mon)
       INTO sales (prod_id, cust_id, time_id, amount)
       VALUES (product_id, customer_id, weekly_start_date+2, sales_tue)
       INTO sales (prod_id, cust_id, time_id, amount)
    SELECT product_id, customer_id, weekly_start_date, sales_sun,
       sales_mon, sales_tue, sales_wed, sales_thu, sales_fri, sales_sat
       FROM sales_input_table;
    

    个人理解:

    “ALL into_clause: Specify ALL followed by multiple insert_into_clauses to perform an unconditional multitable insert. Oracle Database executes each insert_into_clause once for each row returned by the subquery.”

    insert all into并不表示一个表中插入多条记录,而是表示多表插入各一条记录,而这多表可以是同一个表,就成了单表插入多条记录。根据后面子查询的结果,前面每条into语句执行一次,博客正文中value都是“字面量”,所以用select 1 from dual返回一条记录即可。

    参考地址:https://docs.oracle.com/database/121/SQLRF/statements_9015.htm#SQLRF01604
    不当之处请指正,谢谢!

    展开全文
  • MySQL批量插入与更新

    万次阅读 多人点赞 2019-05-20 16:07:36
    结果: 1 20 a 2 26 b 3 30 c 4 22 d 注:insert into values 或 insert into select批量插入时,都满足事务的原子性与一致性,一条出错整体都会回滚。在使用insert into select时,MySQL会对select的数据加S(读)...
  • 问题:用mybaits 批量插入数据到Oracle 数据库的时候, 报错: ORA-00933: SQL 命令未正确结束 / ORA-00933: SQL command not properly ended ; 意思就是 语法错误  原因: oracle 批量插入与mysql 的批量...
  • Oracle 批量插入使得主键自增有很多实现方式,笔者使用的是较为简单的(序列)的方式,实现批量插入。但是有个问题,就是批量插入的同时获取每条插入数据的序列号。因为Oracle本身不像Mysql,是不支持批量返回主键id...
  • 在优化公司系统底层框架批量插入的时候,遇到一个问题,以前的公司底层架构中,批量插入后是返回的插入的条数,而不是返回的批量插入的主键,这样就很难做一些其他的事情,比如如果该表有历史表的话,如给USER_INFO...
  • mysql 批量插入

    2020-12-23 13:38:54
    mysql 批量插入应用场景插入流程视图展示 应用场景 对于需要批量插入数据库的场景,如果采用循环遍历单次插入的话,数据量大时效率较慢,故建议采用批量插入 插入流程 // 1.获取待插入数据来源 // 2.组合待插入数据...
  • in 查询;模糊 like查询;字符串转时间 区间查询;批量插入 foreach
  • 这篇博文讲的是批量插入的例子 dao层框架用的mybatis 最一开始我的批量插入其实是个伪批量 是类似吧很多条insert into语句 直接拼成一条 然后直接运行 发现这样的效率真的是十分低 我做测试时285条数据 插入一...
  • MyBatis批量插入批量更新对象

    千次阅读 2020-08-09 22:42:29
    批量插入对象 批量插入数据,这种写法适用于mysql。通过foreach拼接出多条数据,可以避免循环调用单条插入sql产生的连接成本。 xxxDao.java // 批量插入用户信息 int batchInsert(@Param("list") List<User>...
  • redis批量插入

    2020-04-27 15:40:04
    文章目录Redis 批量插入数据逐条插入批量插入 Redis 批量插入数据 业务需要,每天要向redis插入千万级别的数据,格式为zset,但是插入数据时发现速度极慢,约为200~300条数据/每秒, 这可就不能接受了,这么算下去...
  • mybatis批量插入和批量修改

    千次阅读 2019-10-23 09:17:26
    批量插入和批量修改在项目使用的场景越来越多,能实现批量操作的插件也越来越多。 个人了解到的大致有三种: 插件名称 批量插入 批量修改 mybatis √ √ 通用mapper √ × mybatis plus...
  • Mybatis批量插入返回插入成功后的主键id

    万次阅读 多人点赞 2017-02-13 12:48:06
    我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键: ...但是怎么对批量插入数据返回自增主键的解决方式网上看到的还是比较少,至少百度的结果比较少。 Mybatis官网资料提供如下: First, if
  • jdbc批量插入

    千次阅读 2016-05-19 07:54:06
    jdbc默认提供了批量插入的方法,可能用一次就忘记了,这里做笔记记录一下jdbc批量插入吧。1.1.1. 代码Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverM
  • JDBC批量插入

    万次阅读 2018-06-18 00:27:33
    最近项目中有用到JDBC技术,存在大量数据要进行插入,通过研究采用批量插入速度快的不是一点点。下面简单比较了一下普通插入与批量插入50000条数据的时间效率。常规插入:耗时12952mspublic static void ...
  • SQL批量插入数据

    万次阅读 2018-11-02 14:18:28
    SQL批量插入数据: INSERT INTO orders (Company,OrderNumber) VALUES (‘W3School’,‘2356’),(‘Apple’,‘4698’),(‘W3School’,‘6953’)
  • Mbatis批量插入

    千次阅读 2018-09-27 21:37:00
    Mbatis批量插入 @Date 2016.11.13 使用Mbatis批量插入功能代码示例 在做批量插入时要注意细节、如有写错会有奇怪的异常抛出 有可能会出现异常 : Parameter ‘__frch_callRecord_0’ not found @Insert('''<...
  • C# 批量插入表SQLSERVER SqlBulkCopy往数据库中批量插入数据 /// /// SqlBulkCopy往数据库中批量插入数据 /// /// 数据源表 /// 服务器上目标表 /// 创建新的列映射,并使用列序号引用源列和目标列的列名称...
  • 摘要:1、批量插入 <insert id="insertBatch" parameterType="java.util.List"> insert into t_student(name, age, class) ... 1、批量插入 <insert id="insertBatch" parameterType="java.util.L.....
  • mybatis批量插入插入数据、批量条件查询 ps:参考文章连接:https://www.cnblogs.com/admol/articles/4248159.html 关于个人的使用经验:先把数据放到bean中,多个的话就全放入list集合,如下代码: /* * 把...
  • Mybatis 批量插入数据

    2020-01-07 21:31:09
    mybatis 批量插入
  • 1.批量插入 mapper int insertBrandBusinessByExcel(List<Label> list); .xml <!--批量插入--> <insert id="insertBrandBusinessByExcel" parameterType="com.mj.linen.pojo.label.Labe...
  • Mybatis批量插入或更新的正确姿势

    万次阅读 2018-10-15 20:23:01
    最近业务中用到批量插入或更新,查了一下资料。 另外一篇博客是对本文的补充,也可以参考一下:https://blog.csdn.net/w605283073/article/details/88652042 其中stackoverflow中这个回答给了我很大启发。 ...
  • Mybatis 插入与批量插入以及多参数批量删除
  • mybatisPlus批量插入

    2020-08-08 09:35:37
    mybatisPlus批量插入 1、只有一个Service类没有impl的时候 可以这么写 @Service @Slf4j public class OrgService extends ServiceImpl<OrgMapper,Org> implements IService<Org> { @Autowired ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,395
精华内容 7,358
关键字:

批量插入