MySQL 异常处理:修订间差异
(创建页面,内容为“== MySQL 异常处理 == === 一、定义异常处理: === DECLARE ... HANDLER, 必须出现在变量或条件声明的后面 当某个错误(condition_value)发生时,执行指定的语句(statement),执行完之后再决定如何操作(action) DECLARE action HANDLER FOR condition_value [, condition_value, ...] statement ===== action: ===== CONTINUE | EXIT # exit 只退出当前 begin end ===== condition_value: ===== * mysql…”) |
无编辑摘要 |
||
(未显示同一用户的2个中间版本) | |||
第1行: | 第1行: | ||
MySQL 异常处理 | |||
=== | === 定义异常处理 === | ||
DECLARE ... HANDLER, 必须出现在变量或条件声明的后面 | DECLARE ... HANDLER, 必须出现在变量或条件声明的后面 | ||
第10行: | 第10行: | ||
statement | statement | ||
===== action | ===== action ===== | ||
CONTINUE | EXIT # exit 只退出当前 begin end | CONTINUE | EXIT # exit 只退出当前 begin end | ||
===== condition_value | ===== condition_value ===== | ||
* mysql_error_code# MySQL 自定义的错误代码 | * mysql_error_code# MySQL 自定义的错误代码 | ||
第39行: | 第39行: | ||
DECLARE CONTINUE HANDLER FOR NOT FOUND set error = 1; # 忽略某类错误,置错误状态 | DECLARE CONTINUE HANDLER FOR NOT FOUND set error = 1; # 忽略某类错误,置错误状态 | ||
=== | === 错误处理器的优先级 === | ||
当有多个错误处理器都满足特定错误条件的时候,MySQL将按更明确者优先的原则决定优先级。 | 当有多个错误处理器都满足特定错误条件的时候,MySQL将按更明确者优先的原则决定优先级。 | ||
第45行: | 第45行: | ||
基于错误处理器的优先级规则,MySQL 错误码处理器,SQLSTATE 错误处理器 和 SQLEXCEPTION错误处理器顺序上分别排在1、2、3位。 | 基于错误处理器的优先级规则,MySQL 错误码处理器,SQLSTATE 错误处理器 和 SQLEXCEPTION错误处理器顺序上分别排在1、2、3位。 | ||
[[分类:Develop]] | |||
[[分类:DB]] | |||
[[分类:MySQL]] |
2022年12月30日 (五) 15:55的最新版本
MySQL 异常处理
定义异常处理
DECLARE ... HANDLER, 必须出现在变量或条件声明的后面
当某个错误(condition_value)发生时,执行指定的语句(statement),执行完之后再决定如何操作(action)
DECLARE action HANDLER FOR condition_value [, condition_value, ...]
statement
action
CONTINUE | EXIT # exit 只退出当前 begin end
condition_value
- mysql_error_code# MySQL 自定义的错误代码
- SQLSTATE [VALUE]# ANSI SQL和 ODBC 的标准化的错误代码
- condition_name #
- SQLWARNING # 01 开头sqlstate码
- NOT FOUND # 02 开头sqlstate码,数据不存在的错误,如在使用游标或者SELECT无数据
- SQLEXCEPTION # 除‘01’或‘02’开头的所有sqlstate码
如:ERROR 1045 (28000): Access denied for user 'admin'@'m02' (using password: NO)
DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET error = '23000';
DECLARE CONTINUE HANDLER FOR SQLSTATE '21S01' SET error = '21S01';
DECLARE CONTINUE HANDLER FOR 1136 SET error = '21S01'; # 错误编号和SQLSTATE码
DECLARE CONTINUE HANDLER FOR SQLWARNING BEGIN END; # 忽略某类错误
DECLARE EXIT HANDLER FOR SQLWARNING, NOT FOUND, SQLEXCEPTION ... # 获取所有异常
DECLARE CONTINUE HANDLER FOR NOT FOUND set error = 1; # 忽略某类错误,置错误状态
错误处理器的优先级
当有多个错误处理器都满足特定错误条件的时候,MySQL将按更明确者优先的原则决定优先级。
MySQL中的每个错误都会映射到一个特定的错误码,因此错误码是最明确的。一个 SQLSTATE 可以对应到多个 MySQL 错误码,所以没那么明确。SQLEXCEPTION 和 SQLWARNING 分别指代的是 SQLSTATES 中类型相近的一组值,所以它的明确性最低。
基于错误处理器的优先级规则,MySQL 错误码处理器,SQLSTATE 错误处理器 和 SQLEXCEPTION错误处理器顺序上分别排在1、2、3位。