3

我正在为 PHP 库使用 adodb。

为了获取插入记录的 id,我使用这个函数

“$db->插入 ID()”

我想知道数据库表中是否有多个同时插入,此方法是否会为插入的每条记录返回正确的插入 ID?

我问这个的原因是因为我使用最后一个插入 ID 来进一步处理其他记录并在相关表中创建后续条目。

这种方法是否足够安全,或者我错过了什么。

请帮助我为此制定适当的工作计划,以便我可以使用最后一个插入 ID 安全地进一步插入另一个表,而不必弄乱现有数据。

谢谢

4

3 回答 3

10

是的,它可以安全地同时使用。那是因为LAST_INSERT_ID()是每个连接,如此所述:

生成的 ID 在每个连接的基础上维护在服务器中。这意味着函数返回给给定客户端的值是为影响该客户端的 AUTO_INCREMENT 列的最新语句生成的第一个 AUTO_INCREMENT 值。此值不受其他客户端的影响,即使它们生成自己的 AUTO_INCREMENT 值。这种行为确保每个客户端都可以检索自己的 ID,而不用担心其他客户端的活动,也不需要锁或事务。

于 2010-01-23T19:44:52.307 回答
1

$db->Insert_ID() 只会返回最后一个插入 id,所以如果你要插入许多记录并想要获取每个最后插入的行的 id,那么这将成功。

于 2010-01-23T18:37:16.497 回答
1

我想知道数据库表中是否有多个同时插入,此方法是否会为插入的每条记录返回正确的插入 ID?

它只会返回最近插入的 id。
为了获取多个插入的 id,您必须INSERT_ID()在执行每个语句后调用。IE:

INSERT INTO TABLE ....
INSERT_ID()

INSERT INTO TABLE ....
INSERT_ID()

...获取每个插入的 id 值。如果你跑了:

INSERT INTO TABLE ....
INSERT INTO TABLE ....
INSERT_ID()

...只会返回最后一个插入语句的 id。

这种方法是否足够安全,或者我错过了什么。

它比 using 更安全SELECT MAX(id) FROM TABLE,后者可能会返回由其他人插入的值以及与隔离级别相关的其他内容。

于 2010-01-23T18:48:53.607 回答