uint64_t
mysql_insert_id(MYSQL *mysql)
返回
由前一个or
语句为AUTO_INCREMENT
列
生成的值。在对包含字段的表执行语句后使用此函数
,或者使用或
设置列值
。
INSERT
UPDATE
INSERT
AUTO_INCREMENT
INSERT
UPDATE
LAST_INSERT_ID(
expr
)
的返回值
mysql_insert_id()
始终为零,除非在以下条件之一下明确更新:
INSERT
将值存储到AUTO_INCREMENT
列中的语句。无论该值是通过存储特殊值NULL
或0
列中自动生成的,还是显式的非特殊值,都是如此。-
在多行
INSERT
语句的情况下, 返回成功插入mysql_insert_id()
的第一个自动生成的 值。AUTO_INCREMENT
如果没有成功插入行,则
mysql_insert_id()
返回 0。 如果一条
INSERT ... SELECT
语句被执行,并且没有自动生成的值被成功插入,则mysql_insert_id()
返回最后插入行的ID。如果
INSERT ... SELECT
语句使用 , 则返回 。LAST_INSERT_ID(
expr
)mysql_insert_id()
expr
INSERT
通过插入任何列或将任何列更新为 来生成AUTO_INCREMENT
值的 语句。LAST_INSERT_ID(
expr
)LAST_INSERT_ID(
expr
)如果前面的语句返回错误,则值为
mysql_insert_id()
未定义。
的返回值
mysql_insert_id()
可以简化为如下序列:
如果有一
AUTO_INCREMENT
列,并且成功插入了自动生成的值,则返回第一个这样的值。如果 在语句中发生,则返回 ,即使 受影响的表中有一个列。
LAST_INSERT_ID(
expr
)expr
AUTO_INCREMENT
-
返回值因使用的语句而异。在声明后调用时
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 级别使用它来获取值。
CALL
AUTO_INCREMENT
mysql_insert_id()
CALL
LAST_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_REFRESH
0
COM_INIT_DB
。
-
AUTO_INCREMENT
多语句中 用户指定的值落在当前值与当前值和受影响的行数的总和INSERT
之间的范围内 。AUTO_INCREMENT