27.7.6.38 mysql_insert_id()

my_ulonglong mysql_insert_id(MYSQL *mysql)

Description

返回由上一个INSERTUPDATE语句为AUTO_INCREMENT列生成的值。在对包含AUTO_INCREMENT字段的 table 中执行INSERT语句或使用INSERTUPDATE设置LAST_INSERT_ID(expr)的列值之后,请使用此功能。

除非在以下条件之一下显式更新,否则mysql_insert_id()的返回值始终为零:

如果没有成功插入任何行,则mysql_insert_id()返回 0.

mysql_insert_id()的返回值可以简化为以下 Sequences:

插入...在重复的密钥更新上语句后调用时:

如果前一条语句不使用AUTO_INCREMENT值,则mysql_insert_id()返回0。如果必须保存该值以备后用,请确保在生成该值的语句后立即调用mysql_insert_id()

mysql_insert_id()的值仅受当前 Client 端连接内发出的语句影响。它不受其他 Client 发布的声明的影响。

LAST_INSERT_ID() SQL 函数将包含成功插入的第一个自动生成的值的值。不会在语句之间重置LAST_INSERT_ID(),因为该函数的值在服务器中维护。与mysql_insert_id()的另一个区别是,如果将AUTO_INCREMENT列设置为特定的非特殊值,则不会更新LAST_INSERT_ID()。参见第 12.15 节“信息功能”

对于产生AUTO_INCREMENT值的存储过程,在CALL语句之后mysql_insert_id()返回0,因为在这种情况下mysql_insert_id()适用于CALL而不是过程中的该语句。在该过程中,可以在 SQL 级别上使用LAST_INSERT_ID()获得AUTO_INCREMENT值。

LAST_INSERT_ID()mysql_insert_id()之所以不同的原因是,LAST_INSERT_ID()易于在脚本中使用,而mysql_insert_id()试图提供有关AUTO_INCREMENT列发生了什么的更准确的信息。

Note

Client 端/服务器协议中使用的 OK 数据包保存信息,例如用于会话状态跟踪的信息。当 Client 端读取 OK 数据包以了解会话状态是否发生更改时,这将重置值,例如最后的插入 ID 和受影响的行数。此类更改会导致mysql_insert_id()在执行包括但不一定限于COM_PINGCOM_REFRESHCOM_INIT_DB的命令后返回 0.

Return Values

在前面的讨论中进行了描述。

Errors

在 multi INSERT语句中用户指定的AUTO_INCREMENT值落在当前AUTO_INCREMENT值与当前和受影响的行数之和之间的范围内。

首页