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语句也就是说,在插⼊的sql中,我们⾃⼰把主键id设定好了。
由于这种批量插⼊数据的操作耗时⾮常短,所以我觉得同⼀个时刻,同时有⼈在操作分销功能的可能性很⼩,所以我认为出现主键id重复,导致插⼊失败的可能性就很⼩。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。