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