如何在mysql中精准获取最后插入记录的id?

3

我正在构建一个 Web 应用程序,可以同时被多个用户使用。他们可以同时添加数据。

我有一个名为 doctor_main 的表,如下所示:

数据库截图 http://img687.imageshack.us/img687/7033/testxqz.png

一旦添加了有关医生的记录,我希望返回插入记录的 ID(这是一个自动递增字段)。

我知道可以使用 LAST_INSERT_ID() 和 mysql_insert_id 等方法,但我不知道它们的行为方式。

我需要确切的记录 ID,即由特定用户插入的记录 ID。

有时,如果两个用户尝试插入记录,则不应交换返回的 ID。

要实现这一点,我应该使用什么样的 MySQL 函数?


1
为什么不相信它呢……它有效,比你更聪明的人已经研究了多年。返回的ID是该用户线程最后插入的ID,而不是任何其他用户线程的ID。 - Mark Baker
1
LAST_INSERT_ID() 是基于每个 MySQL 连接的,用于自动递增列生成的 ID。只要在同一连接上进行 INSERT 操作后调用 LAST_INSERT_ID(),就不会出现并发问题。 - nos
@MarkBaker 是的,我希望比我更聪明的人已经研究了这个问题多年了,这就是为什么我在这里向更聪明的人寻求确认。怀疑并澄清问题并不是一种罪过,而是比盲目跟随更好的选择。 :) - Bala
6个回答

8
整本手册都有一个专门介绍此主题的页面: 以下是该页面的一句引用,可以帮助回答您的问题:

对于LAST_INSERT_ID()函数,最近生成的ID在服务器上基于每个连接进行维护。它不会被其他客户端更改。


@所有人 我发现mysql_insert_id是实现我的任务的最佳选择 :) 非常感谢你们的回复。 - Bala

3

mysql_insert_id() 返回最后插入记录的确切id,因此如果您只是 echo mysql_insert_id() ,您将得到最后插入的行的id。


2
根据文档mysql_insert_id将返回您之前完成的插入操作的确切id。

2

LAST_INSERT_ID()mysql_insert_id 都能够正常工作。每个客户端将会收到该客户端执行的最后一个语句插入的ID


2

LAST_INSERT_ID() 是基于连接的操作;多个用户将使用多个连接,因此用户之间永远不会交换 ID。


-1

如果你对last_insert_id的机制持怀疑态度,那么你可以手动分配id而不是使用MySQL的auto_increment特性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接