2

我想在插入后立即获取表的自动增量 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
4

1 回答 1

2

MySQL手册说这个

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

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

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

当前执行的语句不影响 LAST_INSERT_ID() 的值。

如果前面的语句返回错误,则 LAST_INSERT_ID() 的值未定义。对于事务表,如果语句由于错误而回滚,则 LAST_INSERT_ID() 的值未定义。对于手动 ROLLBACK,LAST_INSERT_ID() 的值不会恢复到事务之前的值;它保持在回滚点的状态。

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

于 2012-04-12T17:03:29.193 回答