最近在做分销功能的按组分销模块时,一次需要插入一万多条数据,同时还需要获得插入数据的主键 id ,用于后续逻辑的使用。

最初我是通过循环,一条一条的插入,然后一边插入,一边执行数据更新。这种方式,慢到自己都不能忍,更何况是用户了,于是想到了使用批量插入的方式进行优化。

在网上查了查,批量插入主要有三种方式:

1、循环插入(这种方式就是我开篇介绍的方式,慢到不能忍);

2、使用事务提交(这种方式我觉得操作起来很麻烦,没有采用);

3、将SQL语句进行拼接,使用

insert into table () values  (),(),(),()然后再一次性插入。如果字符串太长,则需要配置下MYSQL,在

mysql 命令行中运行 :set global max_allowed_packet =

2*1024*1024*10;(我采用了这种方式,速度非常快)

$insetSql = "INSERT INTO hotel_room_fenxiao (`id`,`room_id`,`pfs_id`,`add_id`,`fxs_id`,`add_price`,`is_effect`) VALUES ";

foreach ($insert_arr as $tmpInserInfo){

$insetSql .= "({$tmpInserInfo['id']},{$tmpInserInfo['room_id']},{$tmpInserInfo['pfs_id']},{$tmpInserInfo['add_id']}, {$tmpInserInfo['fxs_id']},{$tmpInserInfo['add_price']},{$tmpInserInfo['is_effect']}),";

}

$insetSql = substr($insetSql, 0,-1);//将最后一个“,”逗号去掉

$insetSql .=";";

$GLOBALS['db']->query($insetSql);

通过上述,成功解决了插入速度慢的问题,但是,还有一个问题需要解决,那就是我需要获得刚刚插入那条数据的主键 id,对数据进行更新,我是怎么做的呢?

1、提前取出该表的最大主键id(定义为 $maxId)

2、在循环组装要插入数据时,对 $maxId 进行“加一”操作(++$maxId),将最新的 $maxId 作为主键进行插入

也就是说,在插入的sql中,我们自己把主键id设定好了。

由于这种批量插入数据的操作耗时非常短,所以我觉得同一个时刻,同时有人在操作分销功能的可能性很小,所以我认为出现主键id重复,导致插入失败的可能性就很小。

mysql 批量录入 id_Mysql 批量插入数据 提前获得主键id相关推荐

  1. mysql generatedkey_Mybatis使用generatedKey在插入数据时返回自增id始终为1,自增id实际返回到原对象当中的问题排查...

    今天在使用数据库的时候,遇到一个场景,即在插入数据完成后需要返回此数据对应的自增主键id,但是在使用Mybatis中的generatedKey且确认各项配置均正确无误的情况下,每次插入成功后,返回的都 ...

  2. mybatis 插入数据时返回主键

    在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:显然,假如主键是你生成后插入的,自然你已经有主键了,显然不需要我们再去获得,所以我们这里处理的是当主键 ...

  3. Mysql创建表结构及插入数据代码

    Mysql创建表结构及插入数据代码 CREATE TABLE `user` (`id` int(11) NOT NULL auto_increment,`username` varchar(255) ...

  4. python mysql批量insert数据、返回id_Python3 操作 MySQL 插入一条数据并返回主键 id的实例...

    Python 中貌似并没有直接返回插入数据 id 的操作(反正我是没找到),但是我们可以变通一下,找到最新插入的数据 #!/usr/bin/env python3 # -*- coding: UTF- ...

  5. python向es写入大量数据_使用Python-elasticsearch-bulk批量快速向elasticsearch插入数据_李谦的博客-CSDN博客...

    from elasticsearch import Elasticsearch from elasticsearch import helpers import pymysql import time ...

  6. oracle批量插入并且返回自增主键_mybatis + (oracle)实现主键自增 + 插入数据并返回主键...

    一.实现主键自增 在oracle数据库中,主键并没有办法自动增长,无法使用insert对应的useGeneratedKeys和keyProperty属性自动返回增加的主键. 要实现自增需要修改 ID列 ...

  7. mysql插入数据后返回自增id

    mysql插入数据后返回自增id 使用<insert 中的useGeneratedKeys 和 keyProperty 两个属性 在Mybatis Mapper文件中添加属性 useGenera ...

  8. mysql c api 函数 linux下 mysql_query_Linux C 调用MYSQL API 函数mysql_escape_string()转义插入数据...

    标签: Title:Linux C 调用MYSQL API 函数mysql_escape_string()转义插入数据 --2013-10-11 11:57 #include #include #in ...

  9. mysql获取一个表的数据作为值插入_请问如何在mysql中得到一个即将插入数据表中的那条数据的id值(id自增长)?...

    我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数, 一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的. 但在多线程情况下,就不行了. 下面 ...

  10. mysql c接口返回自增id_详解mysql插入数据后返回自增ID的七种方法

    引言 mysql 和 oracle 插入的时候有一个很大的区别是: oracle 支持序列做 id: mysql 本身有一个列可以做自增长字段. mysql 在插入一条数据后,如何能获得到这个自增 i ...

最新文章

  1. “四非”高校南京工业大学,17天内三连击Nature、Science!实为深藏不露
  2. python超多数据柱状图_Python快速生成可视化,Excel数据再多也不怕!
  3. 让我们一起Go(十三)
  4. HighNewTech:2019.08.09程序猿界大事件之【你好,我是鸿蒙OS】~【来了,老弟】—技术才是硬道理,开源方能建立新生态!
  5. MYSQL交通系统查询,城市公交查询系统的设计与实现(SSH,MySQL)(含录像)
  6. winform datagridview 设置标题
  7. javascript设计模式_Javascript 前端设计模式
  8. 3个Python面试回答的技巧,助你面试大大加分
  9. MVC架构在Asp.net中的应用和实现
  10. j2ee简介(来自http://dev.csdn.net/article/37/37543.shtm)
  11. React Native 蓝牙4.0 BLE开发
  12. Ajax判断用户名是否可用
  13. [css] 简述下你理解的优雅降级和渐进增强
  14. mysql找不到performance_Mysql安装完毕运行时没有mysql和performance_schema数据库_MySQL
  15. java里氏替换原则例子_java 设计原则(六)里氏替换原则
  16. Unity3D基础16:网格过滤器和渲染器
  17. 一个「秒搜」豆瓣好书的网站
  18. UVa 12307 Smallest Enclosing Rectangle(旋转卡壳+最小覆盖矩形)
  19. java导出doc文档
  20. 触屏笔哪个牌子好?平替电容笔性价比高的推荐

热门文章

  1. 王道考研操作系统同步与互斥(王道大题详解)
  2. A级学科计算机技术,东南大学a类学科排名!附东大a类学科名单
  3. 26个字母大小写的ASCII码值
  4. 打印机驱动安装及换色带
  5. 城市规划图例符号_城市规划图例符号精编版
  6. ns3学习之ns3模拟基本流程
  7. h5 默认为移动端页面_HTML5默认登录页面
  8. 计算机主机放电,电脑需要放电才能开机_电脑主板放电才能开机
  9. mysql进阶教程pdf_SQL进阶教程 (MICK著) 高清pdf完整版
  10. Sublime text3 安装PyV8