我想在插入后立即获取表的自动增量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
答案 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那样。
所以是的,这是最好的方法,只要您使用单个插入查询而不是分组的