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就不会出错了。

上一篇 下一篇

猜你喜欢

热点阅读