mysql @@ identity vs sql-server last_insert_id()

时间:2010-02-05 18:14:10

标签: sql mysql sql-server stored-procedures dml

我是否理解mysql的LAST_INSERT_ID()函数在插入尝试之间没有重置(正如@@ identity在sql-server中所做的那样)...如果前面的插入操作失败,LAST_INSERT_ID()将返回无论该连接的最后一次插入到具有自动递增主键的 任何 表的pk是什么的。如果我在这方面是正确的,这似乎不仅仅是关于这个函数的最迟钝的行为吗?是否没有与sql-server的@@ identity类似的mysql函数?如果 紧接在 插入尝试之前的 ,则会返回NULL而不会创建新记录吗?或者,如何确定最近插入操作的主键?

2 个答案:

答案 0 :(得分:6)

@@ identity在sql server中通常也是错误的。在大多数情况下,您应该使用scope_identity()

在MySql中,last_insert_id()应该是安全的,因为在插入错误之后你可以调用此函数的唯一方法就是你已经正确捕获并解释了插入错误。否则你仍然会处理命令。换句话说,last_insert_id()不是您的错误处理机制。

答案 1 :(得分: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!
}
?>