我需要做什么,以确保$ mdb2-> lastInsertID()返回该连接的自动增量值?

时间:2011-04-11 15:10:59

标签: php mysql transactions auto-increment mdb2

我最近从SQL Server到MySQL进行了切换,我无法在任何地方找到足够可靠的答案:

我在需要锁定的表上使用PHP,MySQL和InnoDB表引擎。所以对于标准系列的3个陈述:

  1. 插入表A
  2. $ id = $ mdb2-> lastInsertID()
  3. 插入表B(name,fk)VALUES('foo',$ id)
  4. 我需要采取哪些步骤来确保$ id具有步骤1中插入的​​值?它的方式好吗?一切都需要在交易中吗?我是否需要添加其他查询来锁定和释放表格?

    谢谢你们。

2 个答案:

答案 0 :(得分:4)

你应该/可以,但你不需要做任何事情: information-functions , function_last-insert-id

  

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

答案 1 :(得分:0)

如果任何查询失败,最好使用事务,至少可以回滚其他更新。

自己处理

如果步骤3失败,您将收到来自mysql store的错误消息,该消息在变量中并检查是否收到删除在1步中插入的记录。

这就是所有交易句柄。你应该使用交易。