好的,首先,我承认我在这里提出了这个问题的元素:How to get result of Insert
无论如何,我有两个表,在第二个表中有一个表A
的外键列。
id Name
----------------
1 Name1
2 Name2
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结束?
谢谢,
萨姆
答案 0 :(得分:1)
mysql_insert_id()
答案 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()