【MYSQL】自增数列id的获取
在数据库中,经常需要把获得的若干信息分成几部分插入到不同的表中,并通过外键的方式进行连接,如果是有意义且唯一的外键,那么就会很简单,但有时会直接使用插入数据的id(key,自增)作为外键进行连接,由于id是自增的,而非像外键一样由用户指定,所以用户是无法知道id的值的,这就需要采取一些手段。
一个自然地想法是插入的最后一条数据的id就是我们需要的,所以使用:
select max(id) from tablename
来获取id值,但是该方法是不考虑并发情况的,也就是说在操作的时候必须先加锁,操作完成之后再解锁才能保证结果的正确性,相对来说比较麻烦。
另一种方法是使用:
select LAST_INSERT_ID()
该方法从语义上来看和第一种方法是一样的,但是该方法是基于数据库连接的,是线程安全的。
注意:使用select last_insert_id()时要注意,当一次插入多条记录时,只是获得第一次插入的id值
所谓线程安全
1. 在连接1中向A表插入一条记录,A表包含一个auto_increment类型的id。
2. 在连接2中向A表再插入一条记录。
3. 结果:在连接1中执行select LAST_INSERT_ID()得到的结果和连接2中执行select LAST_INSERT_ID()的结果是不同的;而在两个连接中执行select max(id)的结果是相同的。
Ref:https://blog.csdn.net/anan890624/article/details/50808515
网友评论