MySQL – last_insert_id详解

一直,有,这么一个问题,困扰着我…那就是,在取上一次INSERT产生的ID时,如果紧邻我INSERT之后,别的用户INSERT了,那么我取回的是哪个ID?想了半天,潜意识觉得应该得到的就是我INSERT的,毕竟人家也不是弱智,不可能不考虑这种实际的需求,而且我也觉得,last_insert_id应该对应这某一个ID(这个ID不是值数据表中的ID),就好像每个SESSION都对应着一个SESSION ID一样。今日查了查资料,确实如我所想。

LAST_INSERT_ID()、LAST_INSERT_ID(expr)
自动返回最后一个INSERT或 UPDATE 为 AUTO_INCREMENT 列设置的第一个 发生的值。

mysql> SELECT LAST_INSERT_ID();
-> 195

产生的ID 每次连接后保存在服务器中。这意味着函数向一个给定客户端返回的值是该客户端产生对影响AUTO_INCREMENT列的最新语句第一个 AUTO_INCREMENT值的。这个值不能被其它客户端影响,即使它们产生它们自己的 AUTO_INCREMENT值。这个行为保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁或处理。(因为last_insert_id是针对connection的)假如你使用一个非“magic”值来更新某一行的AUTO_INCREMENT 列,则LAST_INSERT_ID() 的值不会变化(换言之, 一个不是 NULL也不是 0的值)。

重点: 假如你使用单INSERT语句插入多个行,  LAST_INSERT_ID() 只返回插入的第一行产生的值。其原因是这使依靠其它服务器复制同样的 INSERT语句变得简单。

更多的说明:

http://zhaohe162.blog.163.com/blog/static/38216797201122411193745/

http://blog.sina.com.cn/s/blog_5b5460eb0100nwvo.html

    分享到:

发表评论

电子邮件地址不会被公开。 必填项已用*标注