我是否正确理解 mysql 的 LAST_INSERT_ID() 函数在插入尝试之间不会重置(就像@@identity 在 sql-server 中所做的那样)......如果前面的插入操作失败,LAST_INSERT_ID() 将返回任何内容的 pk该连接最后一次插入具有自动递增主键的任何表的 pk 是。如果我在这点上是正确的,这似乎不只是人们可以想出的这个功能最迟钝的行为吗?是否没有 mysql 函数的行为类似于 sql-server 的@@identity?如果前面的插入尝试没有创建新记录,将返回 NULL吗?或者,如何确定最近插入操作的主键?
问问题
9938 次
2 回答
6
@@identity 在 sql server 中通常也是错误的。您应该scope_identity()
在大多数情况下使用。
在 MySql 中,last_insert_id() 应该可以安全使用,因为在插入错误后调用此函数的唯一方法是您已经正确捕获并解释了插入错误。否则你仍然会处理命令。换句话说, last_insert_id() 不是您的错误处理机制。
于 2010-02-05T18:22:34.710 回答
1
您必须先检查插入是否成功。如果插入成功,那么您可以依赖 LAST_INSERT_ID()。
编辑:在php中:
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');
mysql_query('<PUT YOUR INSERT HERE');
if(mysql_affected_rows()>0){
$last_id=mysql_insert_id();
}else{
//panic!
}
?>
于 2010-02-05T18:23:58.920 回答