MySQL中与SQL Server的@@Identity和@@error相当的是什么,以及如何在MySQL中使用try catch?

3
我正在寻找几个MySQL中的全局变量,它们相当于SQL Server中的变量。我需要整个列表,例如:
Sql Server 相应变量
@@error ---
@@Identity ---
等等。
基本上,我现在想知道@@error和@@identity的等效变量是什么。但如果您能提供其他变量,那将非常有帮助。

顺便问一下,你没有在 SQL Server 中使用 @@identity 吧?它并不总是返回正确的结果,你应该使用 scope_identity() 代替。 - HLGEM
@HLGEM: 是的,我不使用@@Identity,因为前几天了解到它的副作用,但我想知道在mysql中是否有类似的功能,因为我现在正在这方面工作。 - Shantanu Gupta
3个回答

6
在当前连接中生成的最后一个auto_increment值(即最后一个标识符)可以使用LAST_INSERT_ID()函数找到。
关于错误,不确定;似乎没有与最后一个错误消息对应的系统变量
有一个show errors语句:
mysql> select a from b;
ERROR 1046 (3D000): No database selected

mysql> show errors;
+-------+------+----------------------+
| Level | Code | Message              |
+-------+------+----------------------+
| Error | 1046 | No database selected | 
+-------+------+----------------------+
1 row in set (0,00 sec)

但是不确定如何使用这个结果...


在进一步搜索后,我找到了这个帖子:获取最后的错误信息,其中说道 (引用)

我认为应该有像 @@last_error_id@@last_error_message 这样的东西,但是我在当前的手册中找不到。

第一个答案则表示 (引用)

目前还不可能实现这个功能,据我们所知,版本5.2中将改进错误处理,希望类似的功能能够实现。


0
关于错误,有一个设施可以获取错误编号和其他信息。有一个名为GET DIAGNOSTICS的实用程序,您可以使用它来查询数据库诊断数据。请参考下面的示例 -
GET DIAGNOSTICS @NUM = NUMBER, @rowsAffected = ROW_COUNT; 
-- here @NUM and @rowsAffected are user variables. Any other variables can work here as well.

在上述语句中,您可以获取错误条件的数量和受影响的行数。对于错误条件,我们引用此实用程序的另一种变体,该变体使用我们从上述语句中获得的错误计数。
GET DIAGNOSTICS CONDITION @NUM
@errNo = mysql_errno, -- Error Number
@msg = message_text, -- Error Message Text
@sqlState = sqlstate_returned -- Affected SQL State under which error occured
;

不过需要注意的是,只有在你预计 SQL 语句会失败时才使用这些语句。由于它们捕获内部数据库诊断信息,任何其他函数都可能很快地重叠你的会话数据。
欲了解更多信息,请参考链接此处

0

如果您对错误数量(或是否存在错误)感兴趣,使用 @@error_count 似乎是有效的。

> select a from bogus_table;
(1054, "Unknown column 'a' in 'field list'")
> select @@error_count;
+---------------+
| @@error_count |
+---------------+
| 1             |
+---------------+

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接