我如何处理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,而不需要考虑其他 客户端的活动 ,并且不需要锁定或事务 。
的$ DB-> INSERT_ID()将返回你只所以如果要插入多条记录,并希望得到每个最后插入的行的ID最后插入ID,那么这将成功运行。
谢谢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
更安全,这可能会返回其他人插入的与隔离级别有关的值。
感谢您的回答:) – 2010-01-25 07:27:27
谢谢Y. Shoham – 2010-01-25 07:26:37
不客气。 – 2010-01-25 07:29:52
当你说客户端时,我认为你的意思是不同的ips请求,如果客户端只有本地主机,并且你有多个脚本同时运行,并且你需要准确的最后一个插入ID,那么该怎么办? – Ajibola 2013-12-12 10:21:50