2

mysql_insert_id()的手册说

因为 mysql_insert_id() 作用于最后执行的查询,所以一定要在生成值的查询之后立即调用 mysql_insert_id()。

该声明不表示任何范围。它是服务器范围的值吗?运行多个脚本或一个脚本的多个实例的服务器能否返回 mysql_insert_id() 的值,该值不是由调用它的脚本执行的最后一次插入生成的?

4

3 回答 3

3

mysql_insert_id() 的作用域是 MySQL 连接。不是user + password,而是当前脚本的实际连接。(注意MySQL连接也可以是mysql_insert_id的参数)

如果关闭并重新打开 MySQL 连接,mysql_insert_id() 将不会返回上一个插入的 id 的 id。

如果在您添加后刚刚插入了一个 ID,但通过另一个脚本执行(我的意思是另一个连接),则 mysql_insert_id() 将返回您的 ID,而不是在您之后实际创建的 ID,而是在另一个连接中创建的 ID。

例子 :

$c1 = mysql_connect($srv, $usr, $pwd);
$c2 = mysql_connect($srv, $usr, $pwd);

$sql = "INSERT INTO table1 (col1, col2) VALUES('x', 'y') "
mysql_query($sql, $c1); // first insert
mysql_query($sql, $c2); // second insert

$id1 = mysql_insert_id($c1);
$id2 = mysql_insert_id($c2);

$id1 将是首先插入的 id,$id2 将是之后插入的 id。

于 2012-04-11T22:44:18.407 回答
1

是的,请参阅以下文章:如何获取最后插入行的唯一 ID

对于 LAST_INSERT_ID(),最近生成的 ID 在每个连接的基础上维护在服务器中。它不会被其他客户端更改。如果您使用非魔术值(即非 NULL 且非 0 的值)更新另一个 AUTO_INCREMENT 列,它甚至不会更改。从多个客户端同时使用 LAST_INSERT_ID() 和 AUTO_INCREMENT 列是完全有效的。每个客户端都将收到客户端执行的最后一条语句的最后插入 ID。

于 2012-04-11T22:32:05.207 回答
1

范围是每个连接。如果脚本的每次运行都打开一个单独的连接(通常会发生这种情况),那么它们将具有单独的范围。

于 2012-04-11T22:33:06.770 回答