last_insert_id的坑
2018-07-04 本文已影响0人
奋斗live
我们在使用mysql时,如果想获取最新的自增id,可使用 last_insert_id 进行获取。
不过使用这个的时候要多注意点,因为这个在高并发的时候,会出错。
比如如下错误。
例子:
比如A表有userId自增,B表有blogId自增
当我们先向A表写入,再向B表写入,再执行last_insert_id 可能会获取到的是userId的自增id,而不是blogId。
以php代码为例
php可以使用 mysql_query()进行执行
以下是php官方的定义
resource mysql_query ( string $query [, resource $link_identifier = NULL ] )
很重要的一点就是,使用mysql_query的时候,这个 $link_identifier(也就是连接符)一定不能省略,不然执行以下sql语句的时候,有时就会获取到错误的自增id,就像前面说的,会获取到userId
mysql_query("select last_insert_id")
如果加上以下的resource,则会获取到正确的自增id
mysql_query("select last_insert_id",resource $link_identifier)
这个resource就代表使用的是共同的数据库句柄资源。我们插入到user表的时候,要使用这个句柄资源,查询自增id的时候,也要使用这同一个数据库句柄资源。这样获取的id就不会出错了。