MySQL插入数据后返回自增id的方法

在数据库操作中,很可能在执行插入操作(A表)时,需要先在另一张表(B表)中插入一条记录,然后获取其主键id,并将这id插入这张表(A表)。
对于新手而言,想到的可能是我先在B表执行“insert into”插入一条记录,然后立即执行“select max(id)"查询操作,查询最大id就行了。这样做,看似可行,但有很大隐患存在:
1、在数据量庞大的情况下,第二条查询语句效率极低。我遇到的情况是,从一个特征表里,找出某条特征的数据,一条特征有1K的数据量,可以想象,如果里面有很多特征的话,每次拿1K的数据量去对比,对比n次,效率太低,也容易出错。
2、并发操作的时候,无法保证”select max(id)“返回的仍然是刚才我插入的记录,也有可能是另一个人的。

带着上述问题,先总结一下有哪些方法可以返回自增id,最好是不要执行那一条查询语句。有幸看到了这位大神的博客( 链接),他总结得很全面了,我就不累述了。
推荐使用
SELECT LAST_INSERT_ID();

因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的Connection对象,LAST_INSERT_ID函数 将返回该Connection对AUTO_INCREMENT列最新的insert or update*作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。使用单INSERT语句插入多条记录,  LAST_INSERT_ID返回一个列表。
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值