SQLSTATE 是一个五位数的代码,用于标识 SQL 语句或过程中发生的错误或异常。这些代码由 SQL 标准定义,但也包括一些用于用户定义错误或特定于数据库管理系统的代码。
当你使用 SIGNAL(在支持该语法的数据库系统中,如 MySQL)或类似的机制(如 PostgreSQL 的 RAISE)来触发自定义错误时,你可以选择使用预定义的 SQLSTATE 值之一,或者选择一个在用户定义范围内的值。
预定义的 SQLSTATE 值范围包括:
- 00000 到 02FFF:成功完成
- 03000 到 03FFF:警告
- 07000 到 07FFF:动态 SQL 错误
- 08000 到 08FFF:连接异常
- 09000 到 09FFF:特性不被支持
- 21000 到 21FFF:数据异常
- 22000 到 22FFF:数据引用完整性异常
- 23000 到 23FFF:约束违反
- 24000 到 24FFF:无效游标状态
- 25000 到 25FFF:无效的事务状态
- 26000 到 26FFF:无效的 SQL 语句标识符
- 27000 到 27FFF:触发的数据更改异常
- 28000 到 28FFF:无效授权规范
- 29000 到 29FFF:无效或未知的 SQLSTATE
- 2F000 到 2FFFF:SQL 访问规则和系统目录错误
- 33000 到 33FFF:无效的 SQL 语句名称
- 34000 到 34FFF:游标名称不存在
- 38000 到 38FFF:外部资源错误
- 39000 到 39FFF:外部例程异常
- 3B000 到 3BFFF:保存点异常
- 3D000 到 3DFFF:无效的规范
- 40000 到 40FFF:事务回滚
- 42000 到 42FFF:语法错误或访问规则违反(这通常是用户定义错误的好范围)
- 44000 到 44FFF:WITH CHECK OPTION 违反
- HZ000 到 HZ999:特定于实现的错误
当你选择用户定义的 SQLSTATE 值时,建议使用 42000 到 42FFF 范围内的值,因为这些值通常用于语法错误或访问规则违反,但它们也可以用于其他用户定义的错误。不过,重要的是要确保你选择的 SQLSTATE 值不会与任何预定义的 SQLSTATE 值冲突。