我如何处理mysql表中的并发插入并获取正确的插入ID

我如何处理mysql表中的并发插入并获取正确的插入ID

问题描述:

我正在使用adodb for PHP库。我如何处理mysql表中的并发插入并获取正确的插入ID

有关读取在该记录插入我使用这个功能

"$db->Insert_ID()"

我想知道,如果有多个,并同时插入到数据库表中的ID,将这个方法返回我的正确插入的ID为每记录插入?

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

这种方法足够安全吗?或者我错过了一些东西。

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

感谢

是的,它可以安全使用。这是因为LAST_INSERT_ID()是每个连接的,如所解释here

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

+0

谢谢Y. Shoham – 2010-01-25 07:26:37

+0

不客气。 – 2010-01-25 07:29:52

+0

当你说客户端时,我认为你的意思是不同的ips请求,如果客户端只有本地主机,并且你有多个脚本同时运行,并且你需要准确的最后一个插入ID,那么该怎么办? – Ajibola 2013-12-12 10:21:50

的$ DB-> INSERT_ID()将返回你只所以如果要插入多条记录,并希望得到每个最后插入的行的ID最后插入ID,那么这将成功运行。

+0

谢谢sarfraz :) – 2010-01-25 07:27:51

我想知道是否有多个同时插入到数据库表中,此方法是否会为插入的每条记录返回正确的插入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。

这种方法足够安全吗?或者我错过了一些东西。

它比使用SELECT MAX(id) FROM TABLE更安全,这可能会返回其他人插入的与隔离级别有关的值。

+0

感谢您的回答:) – 2010-01-25 07:27:27