【发布时间】:2011-01-13 15:20:42
【问题描述】:
我是否正确理解mysql的 LAST_INSERT_ID() 函数在插入尝试之间不会重置(就像@@identity 在 sql-server 中所做的那样)...如果前面的插入操作失败,LAST_INSERT_ID() 将返回该连接最后一次插入具有自动递增主键的 any 表的任何 pk 的 pk 是。如果我在这点上是正确的,这似乎不只是人们可以想出的这个功能最迟钝的行为吗?是否没有 mysql 函数的行为类似于 sql-server 的@@identity?如果 紧接在前面 插入尝试没有创建新记录,则返回 NULL 的方法?或者,如何确定最近一次插入操作的主键?
【问题讨论】:
-
@@identity 为您提供任何范围内的最新插入。这可能是与您刚刚运行的插入语句无关的触发器的结果。在 SQL Server 中,您通常希望使用 scope_identity() 函数。
-
@feihtthief - 谢谢,很好的说明 +1
-
请注意,SQL Server 的 @@identity 和 scope_identity() 在具有多个处理器的服务器上与多行插入一起使用时,可能会给出错误的答案!使用 OPTION (MAXDOP 1) 是一种解决方法。
标签: sql mysql sql-server stored-procedures dml