我正在为 PHP 库使用 adodb。
为了获取插入记录的 id,我使用这个函数
“$db->插入 ID()”
我想知道数据库表中是否有多个同时插入,此方法是否会为插入的每条记录返回正确的插入 ID?
我问这个的原因是因为我使用最后一个插入 ID 来进一步处理其他记录并在相关表中创建后续条目。
这种方法是否足够安全,或者我错过了什么。
请帮助我为此制定适当的工作计划,以便我可以使用最后一个插入 ID 安全地进一步插入另一个表,而不必弄乱现有数据。
谢谢
我正在为 PHP 库使用 adodb。
为了获取插入记录的 id,我使用这个函数
“$db->插入 ID()”
我想知道数据库表中是否有多个同时插入,此方法是否会为插入的每条记录返回正确的插入 ID?
我问这个的原因是因为我使用最后一个插入 ID 来进一步处理其他记录并在相关表中创建后续条目。
这种方法是否足够安全,或者我错过了什么。
请帮助我为此制定适当的工作计划,以便我可以使用最后一个插入 ID 安全地进一步插入另一个表,而不必弄乱现有数据。
谢谢
是的,它可以安全地同时使用。那是因为LAST_INSERT_ID()
是每个连接,如此处所述:
生成的 ID 在每个连接的基础上维护在服务器中。这意味着函数返回给给定客户端的值是为影响该客户端的 AUTO_INCREMENT 列的最新语句生成的第一个 AUTO_INCREMENT 值。此值不受其他客户端的影响,即使它们生成自己的 AUTO_INCREMENT 值。这种行为确保每个客户端都可以检索自己的 ID,而不用担心其他客户端的活动,也不需要锁或事务。
$db->Insert_ID() 只会返回最后一个插入 id,所以如果你要插入许多记录并想要获取每个最后插入的行的 id,那么这将成功。
我想知道数据库表中是否有多个同时插入,此方法是否会为插入的每条记录返回正确的插入 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
,后者可能会返回由其他人插入的值以及与隔离级别相关的其他内容。