SQL,通过LAST_INSERT_ID()选择最后一个插入ID

时间:2015-02-21 18:52:34

标签: php mysql sql

我没有找到确切的答案,所以我试着在这里问一下。 我运行SQL INSERT查询,然后我想使用的ID 这个INSERT查询,我发现这个:LAST_INSERT_ID()和它的工作,但我想如果我不是唯一一个在服务器上运行查询的人,我会从DB中获取一个错误的ID会发生什么,所以那里是另一个拿最后一个ID吗?

3 个答案:

答案 0 :(得分:0)

你可以从你的表中获得最后一个id,如果id是自动增量

会更好
Select max(id) from yourtable

答案 1 :(得分:0)

它应该从同一连接返回最后一个插入的行id。因此,如果其他用户在其间插入了另一行,LAST_INSERT_ID函数仍会返回第一个用户的相关id。

引用mysql文档:

  

生成的ID基于每个连接在服务器中维护。这意味着函数(LAST_INSERT_ID)返回给定客户端的值是为该客户端影响AUTO_INCREMENT列的最新语句生成的第一个AUTO_INCREMENT值

以下是链接http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

答案 2 :(得分:0)

这既是对这里提出的误解的回答和澄清。

在使用AUTO_INCREMENT对表进行INSERT后,该AI的值正在等待该连接;您可以通过LAST_INSERT_ID(或客户端API的同义词)获取它。

它与连接相关联,而不是交易。

绑定到连接,没有其他连接可能会意外地获取您刚创建的ID。

MAX(id) 运行另一个连接的风险INSERT另一行,从而使id超出刚刚插入的值。因此,MAX(id)可以给你错误的值。

如果你需要INSERT..ON DUPLICATE UPDATE,在线手册有一个明确的例子,说明如何获取行的id,无论是INSERTed还是UPDATEd。它要求你在UPDATE部分看起来很id = LAST_INSERT_ID(id)

AUTO_INCREMENT的唯一要求是它是某些索引中的第一个列,不一定是PRIMARY KEY。 (MyISAM有一个例外,InnoDB没有对应的。)当显式地 INSERT时,不要说PRIMARY KEY(id)是防止重复的id 可能丢失的内容相同的 ID。