MySQL和自动增量一致性

时间:2012-04-12 16:45:29

标签: mysql auto-increment

我想在插入后立即获取表的自动增量ID。 LAST_INSERT_ID()应该可以工作,但它是100%完全证明吗?这意味着如果在存储过程中同时执行两个语句,它是使用该上下文中的最后一个ID,还是使用另一个连接?

INSERT INTO foo (auto,text)
    VALUES(NULL,'text');         # generate ID by inserting NULL
INSERT INTO foo2 (id,text)
    VALUES(LAST_INSERT_ID(),'text');  # use ID in second table

1 个答案:

答案 0 :(得分:2)

MySQL手册说明了这个

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

  

重要       如果使用单个INSERT语句插入多行,LAST_INSERT_ID()将返回为第一个插入生成的值   只排。这样做的原因是可以重现   与其他服务器轻松相同的INSERT语句。

     

LAST_INSERT_ID()的值在所有版本中都是一致的   如果INSERT或UPDATE语句中的所有行都成功。

     

当前正在执行的语句不会影响其值   LAST_INSERT_ID()。

     

如果前一个语句返回错误,则LAST_INSERT_ID()的值未定义。对于事务表,如果是   语句由于错误而回滚,值为   LAST_INSERT_ID()未定义。对于手动ROLLBACK,其值为   LAST_INSERT_ID()未恢复到事务之前的状态;它   仍然像ROLLBACK那样。

所以是的,这是最好的方法,只要您使用单个插入查询而不是分组的