uint64_t mysql_insert_id (MYSQL * MYSQL)
对象生成的值AUTO_INCREMENT
前一栏插入
或更新
声明。执行。后使用此函数插入
语句导入包含AUTO_INCREMENT
田野,或已使用插入
或更新
设置列值LAST_INSERT_ID (
.expr
)
的返回值mysql_insert_id ()
始终为零,除非在以下条件之一下显式更新:
插入
语句将值存储到AUTO_INCREMENT
列。无论该值是通过存储特殊值自动生成的,都是正确的零
或0
或者是显式的非特殊值。在多行的情况下
插入
声明中,mysql_insert_id ()
返回第一个自动生成的AUTO_INCREMENT
已成功插入的。如果没有成功插入行,
mysql_insert_id ()
返回0。如果一个
插入……选择
语句,并且没有成功插入自动生成的值,mysql_insert_id ()
返回最后插入行的ID。如果一个
插入……选择
语句使用LAST_INSERT_ID (
,expr
)mysql_insert_id ()
返回expr
.插入
语句生成AUTO_INCREMENT
通过插入LAST_INSERT_ID (
到任何列,或通过更新任何列expr
)LAST_INSERT_ID (
.expr
)如果前面的语句返回错误,则
mysql_insert_id ()
是未定义的。
的返回值mysql_insert_id ()
可以简化为以下顺序:
如果有
AUTO_INCREMENT
列,并成功插入一个自动生成的值,返回第一个这样的值。如果
LAST_INSERT_ID (
发生在语句中,returnexpr
)expr
,即使有AUTO_INCREMENT
受影响表中的列。返回值取决于所使用的语句。当在
插入
声明:如果有
AUTO_INCREMENT
列,并且该列有一些显式值已成功插入到表中,返回最后一个显式值。
当在
插入……关于重复密钥更新
声明:如果有
AUTO_INCREMENT
列在表中有一些显式的成功插入值或一些更新值,返回最后插入或更新的值。
mysql_insert_id ()
返回0
如果前面的语句不使用AUTO_INCREMENT
价值。如果您必须为以后保存该值,请确保调用mysql_insert_id ()
紧接生成值的语句之后。
的价值mysql_insert_id ()
仅受当前客户端连接中发出的语句的影响。它不受其他客户端发出的语句的影响。
的LAST_INSERT_ID ()
SQL函数将包含成功插入的第一个自动生成的值。LAST_INSERT_ID ()
不会在语句之间重置,因为该函数的值在服务器中维护。另一个区别mysql_insert_id ()
是,LAST_INSERT_ID ()
如果设置AUTO_INCREMENT
列转换为特定的非特殊值。看到信息功能.
mysql_insert_id ()
返回0
后调用
语句,用于生成AUTO_INCREMENT
因为在这种情况下mysql_insert_id ()
适用于调用
而不是过程中的语句。在过程中,您可以使用LAST_INSERT_ID ()
在SQL级别获取AUTO_INCREMENT
价值。
两者差异的原因LAST_INSERT_ID ()
和mysql_insert_id ()
是,LAST_INSERT_ID ()
易于在脚本中使用,而mysql_insert_id ()
试着提供更准确的信息AUTO_INCREMENT
列。
客户端/服务器协议中使用的OK包保存了一些信息,比如用于跟踪会话状态的信息。当客户端读取OK包以了解是否有会话状态变化时,这将重置诸如最后插入的ID和受影响的行数等值。这些变化导致mysql_insert_id ()
在执行包括但不一定限于的命令后返回0COM_PING
,COM_REFRESH
,COM_INIT_DB
.
用户指定的
AUTO_INCREMENT
值在一个多插入
语句位于当前AUTO_INCREMENT
值,以及受影响值的当前行数和行数的总和。