mysql 批量录入 id_Mysql 批量插入数据 提前获得主键id
最近在做分销功能的按组分销模块时,一次需要插入一万多条数据,同时还需要获得插入数据的主键 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相关推荐
- mysql generatedkey_Mybatis使用generatedKey在插入数据时返回自增id始终为1,自增id实际返回到原对象当中的问题排查...
今天在使用数据库的时候,遇到一个场景,即在插入数据完成后需要返回此数据对应的自增主键id,但是在使用Mybatis中的generatedKey且确认各项配置均正确无误的情况下,每次插入成功后,返回的都 ...
- mybatis 插入数据时返回主键
在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:显然,假如主键是你生成后插入的,自然你已经有主键了,显然不需要我们再去获得,所以我们这里处理的是当主键 ...
- Mysql创建表结构及插入数据代码
Mysql创建表结构及插入数据代码 CREATE TABLE `user` (`id` int(11) NOT NULL auto_increment,`username` varchar(255) ...
- python mysql批量insert数据、返回id_Python3 操作 MySQL 插入一条数据并返回主键 id的实例...
Python 中貌似并没有直接返回插入数据 id 的操作(反正我是没找到),但是我们可以变通一下,找到最新插入的数据 #!/usr/bin/env python3 # -*- coding: UTF- ...
- python向es写入大量数据_使用Python-elasticsearch-bulk批量快速向elasticsearch插入数据_李谦的博客-CSDN博客...
from elasticsearch import Elasticsearch from elasticsearch import helpers import pymysql import time ...
- oracle批量插入并且返回自增主键_mybatis + (oracle)实现主键自增 + 插入数据并返回主键...
一.实现主键自增 在oracle数据库中,主键并没有办法自动增长,无法使用insert对应的useGeneratedKeys和keyProperty属性自动返回增加的主键. 要实现自增需要修改 ID列 ...
- mysql插入数据后返回自增id
mysql插入数据后返回自增id 使用<insert 中的useGeneratedKeys 和 keyProperty 两个属性 在Mybatis Mapper文件中添加属性 useGenera ...
- 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 ...
- mysql获取一个表的数据作为值插入_请问如何在mysql中得到一个即将插入数据表中的那条数据的id值(id自增长)?...
我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数, 一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的. 但在多线程情况下,就不行了. 下面 ...
- mysql c接口返回自增id_详解mysql插入数据后返回自增ID的七种方法
引言 mysql 和 oracle 插入的时候有一个很大的区别是: oracle 支持序列做 id: mysql 本身有一个列可以做自增长字段. mysql 在插入一条数据后,如何能获得到这个自增 i ...
最新文章
- “四非”高校南京工业大学,17天内三连击Nature、Science!实为深藏不露
- python超多数据柱状图_Python快速生成可视化,Excel数据再多也不怕!
- 让我们一起Go(十三)
- HighNewTech:2019.08.09程序猿界大事件之【你好,我是鸿蒙OS】~【来了,老弟】—技术才是硬道理,开源方能建立新生态!
- MYSQL交通系统查询,城市公交查询系统的设计与实现(SSH,MySQL)(含录像)
- winform datagridview 设置标题
- javascript设计模式_Javascript 前端设计模式
- 3个Python面试回答的技巧,助你面试大大加分
- MVC架构在Asp.net中的应用和实现
- j2ee简介(来自http://dev.csdn.net/article/37/37543.shtm)
- React Native 蓝牙4.0 BLE开发
- Ajax判断用户名是否可用
- [css] 简述下你理解的优雅降级和渐进增强
- mysql找不到performance_Mysql安装完毕运行时没有mysql和performance_schema数据库_MySQL
- java里氏替换原则例子_java 设计原则(六)里氏替换原则
- Unity3D基础16:网格过滤器和渲染器
- 一个「秒搜」豆瓣好书的网站
- UVa 12307 Smallest Enclosing Rectangle(旋转卡壳+最小覆盖矩形)
- java导出doc文档
- 触屏笔哪个牌子好?平替电容笔性价比高的推荐