本节讨论错误消息是如何在MySQL中产生的以及它们所包含的元素。
错误消息可以产生于服务器端或客户端:
在服务器端,由于SQL语句执行期间发生的问题等,在启动和关闭过程中可能会出现错误消息。
MySQL服务器将一些错误消息写入其错误日志。这些表示数据库管理员感兴趣的问题或需要DBA处理的问题。
服务器向客户端程序发送其他错误消息。这些指示只涉及特定客户端的问题。MySQL客户端库接受从服务器接收到的错误,并使它们对主机客户端程序可用。
客户端错误消息是从MySQL客户端库中生成的,通常涉及与服务器通信的问题。
写入错误日志的服务器端错误消息示例:
在启动过程中产生的这个消息提供了一个状态或进度指示:
2018-09-26T14:46:06.326016Z 0[注]当指定与SSL相关的选项时,跳过生成SSL证书。
此消息表示需要DBA处理的问题:
2018-10-02t03: 410387z0 [ERROR] Plugin 'InnoDB'注册存储引擎失败。
发送到客户端程序的服务器端错误消息示例,如mysql客户:
SELECT * FROM no_such_table;错误1146 (42S02):表的测试。No_such_table '不存在
控件显示的来自客户端库内部的示例客户端错误消息mysql客户:
mysql server 'no-such-host' (0) ERROR 2005 (HY000):
无论错误是来自客户端库内部还是来自服务器,MySQL客户端程序都可能以不同的方式响应。如刚才所示,客户机可能会显示错误消息,以便用户可以采取纠正措施。客户端可以在内部尝试解决或重试失败的操作,或采取其他操作。
当发生错误时,错误信息包括几个元素:错误代码、SQLSTATE值和消息字符串。这些要素具有以下特点:
错误码:此值为数值。它是mysql专用的,不能移植到其他数据库系统。
每个错误数都有相应的符号值。例子:
服务器错误号的符号
1146
是ER_NO_SUCH_TABLE
.表示客户端错误号的符号
2005
是CR_UNKNOWN_HOST
.
错误码在给定MySQL系列的通用可用性(GA)版本中是稳定的。在一个系列达到GA状态之前,新的代码可能仍在开发中,并且可能会发生更改。
SQLSTATE值:该值是一个5个字符的字符串(例如,
“42 s02”
).SQLSTATE值来自ANSI SQL和ODBC,比数字错误代码更标准化。SQLSTATE值的前两个字符表示错误类:类=
“00”
表示成功。类=
“01”
表示警告。类=
“2”
表明”没有找到。”这在游标上下文中是相关的,用于控制游标到达数据集末尾时会发生什么。这种情况也会发生在选择……成
不检索行的语句。var_list
类>
“2”
异常。
对于服务器端错误,并不是所有MySQL错误编号都有相应的SQLSTATE值。在这些情况下,
“HY000”
(一般错误)。对于客户端错误,SQLSTATE值总是
“HY000”
(一般错误),因此区分一个客户机错误和另一个客户机错误是没有意义的。消息字符串:该字符串提供错误的文本描述。