MySQL 8.0 参考手册  / 附录 B 错误信息和常见问题  /  B.1 错误消息来源和元素

B.1 错误消息来源和元素

本节讨论错误消息如何在 MySQL 中产生以及它们包含的元素。

错误消息来源

错误消息可能源自服务器端或客户端:

  • 在服务器端,由于SQL 语句执行过程中出现的问题等,在启动和关闭过程中可能会出现错误消息。

    • MySQL 服务器将一些错误消息写入其错误日志。这些表明数据库管理员感兴趣或需要 DBA 操作的问题。

    • 服务器向客户端程序发送其他错误消息。这些表示仅与特定客户有关的问题。MySQL 客户端库接受从服务器接收到的错误,并使它们可用于主机客户端程序。

  • 客户端错误消息是从 MySQL 客户端库中生成的,通常涉及与服务器通信的问题。

写入错误日志的服务器端错误消息示例:

  • 在启动过程中产生的这条消息提供了一个状态或进度指示器:

    2018-08-29 08:27:31 16664 [Note] Event Scheduler: scheduler
    thread started with id 1
  • 此消息指示需要 DBA 操作的问题:

    2018-10-02 03:20:39 0 [ERROR] Can't open the mysql.plugin
    table. Please run mysql_upgrade to create it.

发送到客户端程序的服务器端错误消息示例,由mysql客户端显示:

mysql> SELECT * FROM no_such_table;
ERROR 1146 (42S02): Table 'test.no_such_table' doesn't exist

来自客户端库的示例客户端错误消息,由mysql 客户端显示:

$> mysql -h no-such-host
ERROR 2005 (HY000): Unknown MySQL server host 'no-such-host' (0)

无论错误是来自客户端库还是从服务器接收到,MySQL 客户端程序都可能以不同的方式响应。如刚才所示,客户端可以显示错误消息以便用户可以采取纠正措施。客户端可能会在内部尝试解决或重试失败的操作,或采取其他措施。

错误消息元素

发生错误时,错误信息包括几个元素:错误代码、SQLSTATE 值和消息字符串。这些元素具有以下特征:

  • 错误代码:此值为数字。它是特定于 MySQL 的,不能移植到其他数据库系统。

    每个错误编号都有相应的符号值。例子:

    错误代码在给定 MySQL 系列的一般可用性 (GA) 版本中是稳定的。在系列达到 GA 状态之前,新代码可能仍在开发中并且可能会发生变化。

  • SQLSTATE 值:此值是一个包含五个字符的字符串(例如,'42S02')。SQLSTATE 值取自 ANSI SQL 和 ODBC,比数字错误代码更标准化。SQLSTATE 值的前两个字符表示错误类别:

    • Class ='00'表示成功。

    • Class ='01'表示警告。

    • Class ='02'表示未找到。这在游标上下文中是相关的,用于控制游标到达数据集末尾时发生的情况。对于未检索任何行 的语句,也会出现这种情况。SELECT ... INTO var_list

    • Class >'02'表示异常。

    对于服务器端错误,并不是所有的 MySQL 错误号都有相应的 SQLSTATE 值。在这些情况下, 'HY000'使用(一般错误)。

    对于客户端错误,SQLSTATE 值始终为 'HY000'(一般错误),因此对于区分一个客户端错误和另一个客户端错误没有意义。

  • 消息字符串:此字符串提供错误的文本描述。