Documentation Home

5.4.42 mysql_insert_id()

uint64_t
mysql_insert_id(MYSQL *mysql)

描述

返回 由前一个or 语句为AUTO_INCREMENT列 生成的值。在对包含字段的表执行语句后使用此函数 ,或者使用或 设置列值 。 INSERTUPDATEINSERTAUTO_INCREMENTINSERTUPDATELAST_INSERT_ID(expr)

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

的返回值 mysql_insert_id()可以简化为如下序列:

  1. 如果有一AUTO_INCREMENT列,并且成功插入了自动生成的值,则返回第一个这样的值。

  2. 如果 在语句中发生,则返回 ,即使 受影响的表中有一个列。 LAST_INSERT_ID(expr)exprAUTO_INCREMENT

  3. 返回值因使用的语句而异。在声明后调用时INSERT

    • 如果表中有一AUTO_INCREMENT 列,并且该列有一些显式值已成功插入表中,则返回最后一个显式值。

    在声明后调用时 INSERT ... ON DUPLICATE KEY UPDATE

    • 如果AUTO_INCREMENT 表中有一列并且有一些显式成功插入的值或一些更新的值,则返回最后插入或更新的值。

mysql_insert_id()0如果前面的语句没有使用 AUTO_INCREMENT值,则返回 。如果您必须保存该值供以后使用,请确保 mysql_insert_id()在生成该值的语句之后立即调用。

的值mysql_insert_id() 仅受当前客户端连接中发出的语句影响。它不受其他客户发布的报表的影响。

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

mysql_insert_id()在生成值的存储过程0的语句之后 返回 , 因为在这种情况下 适用于 而不是过程中的语句。在该过程中,您可以 在 SQL 级别使用它来获取值。 CALLAUTO_INCREMENTmysql_insert_id()CALLLAST_INSERT_ID()AUTO_INCREMENT

LAST_INSERT_ID()和 之间存在差异的原因 mysql_insert_id()LAST_INSERT_ID()在脚本中易于使用,同时 mysql_insert_id()尝试提供有关 AUTO_INCREMENT列发生的情况的更准确信息。

笔记

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

返回值

在前面的讨论中描述。

错误

  • ER_AUTO_INCREMENT_CONFLICT

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