获取SQL插入ID时的同步

时间:2011-05-10 20:30:30

标签: php mysql sql

好的,首先,我承认我在这里提出了这个问题的元素:How to get result of Insert

无论如何,我有两个表,在第二个表中有一个表A的外键列。

表A:

id       Name
----------------
1        Name1
2        Name2

表B:

id       Name      Parent
-------------------------
1        John      1

问题是我需要插入表A的任何ID,用于表B中的外键。

接受的答案是PHP中的以下代码:

$res = mysql_query('SELECT LAST_INSERT_ID()');
$row = mysql_fetch_array($res);
$lastInsertId = $row[0];

我在其他地方看过类似的代码,但是这里没有同步问题吗?难道不可能在一个SQL插入和使用SELECT LAST_INSERT_ID()获取ID之间发生不同的SQL插入吗?因此以错误的ID结束?

谢谢,

萨姆

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

使用函数mysql_insert_id()或您在问题中描述的方法是可靠且并发安全的。这两种方法都使用活动连接,您指向的并发问题是预期的并在内部处理。

如果你谷歌搜索这个问题,你会看到一些人主张使用'SELECT MAX(id)FROM some_table`,它有你担心的并发问题,不应该使用。上述两种方法中的任何一种都没有这个问题,同样也是“最佳实践”。

您可以在此处阅读有关MySQL功能的更多讨论:http://dev.mysql.com/tech-resources/articles/storage-engine/part_3.html

该文章的相关内容:

  

SELECT LAST_INSERT_ID();

     

这是一个特殊的构造,并再次   没有手动,它是完全安全的   锁,无论多少并发   服务器的连接。

在PHP文档中,您可以看到mysql_insert_id()将连接作为参数,或者它假定最后打开的连接:http://php.net/manual/en/function.mysql-insert-id.php

答案 2 :(得分:0)

PHP有自己的功能:mysql_insert_id()