mysql复杂的异常处理_MySQL中的异常处理

1,定义

与java中的异常一样,都是用来定义在处理过程中遇到的问题以及相应的处理方式。

2,自定义异常及处理方式

1,自定义异常语句

DECLARE condition_name CONDITION FOR condition_value;

condition_name:是自己起的名字,最好见名知意。

condition_value:可以是SQLSTATE[VALUE] sqlstate_value也可以是mysql_error_value。

sqlstate_value是长度为5的字符串错误代码。

mysql_error_value是数值类型的错误代码。

2,自定义异常处理

DECLARE handler_type HANDLER FOR condition_value sp_statement;

handler_type:有三个取值

CONTINUE:遇到错误不进行处理,跳过错误继续执行之后的代码。

EXIT:遇到错误时马上退出,不再执行之后的操作。

UNDO:遇到错误后撤回之前已经执行的操作,MySQL暂不支持该操作。

condition_value:错误名称:有以下取值

condition_name:定义异常时取的名字

mysql_error_value:数值类型的错误代码

SQLWARNING:对所有01开头的SQLSTATE代码的速记

NOT FOUND:对所有01开头的SQLSTATE代码的速记

SQLEXCEPTION:除SQLWARNING和NOT FOUND之外的SQLSTATE代码的速记。

sp_statement:异常之后的处理。

3,实例展示

创建以下表格,将u_id设置为主键,并插入以下数据:

8cb15b2d234fa459b494754b3eafa5a9.png

创建一个名为insert_user的存储过程:

BEGIN

set @x = 1;insert into users values(3,'zhaoliu',26);set @x = 2;insert into users values(4,'zhouqi',27);set @x = 3;END

通过使用用户变量@x来查看代码是否运行,调用存储过程

call insert_user();

出现以下错误

e3236dc0b6a636b5359121e5e001bf10.png

其中数字1062就是mysql_error_code。对应的sqlstate_value是‘23000’,具体的对应方式可以看对应表。

查看@x的值

select @x;

e2f4f3a1b62d3814e3c09b206d9cbf8f.png

可以看到u_id = 3的这条语句出现了异常。

接下来我们加入异常处理:

BEGIN#Routine body goes here...

#方式一:直接异常处理

#declare exit HANDLER FOR 1062 set @x1 = 4;

#方式二:先自定义异常,再使用异常处理DECLARE error1 CONDITION for 1062;declare exit HANDLER FOR 1062 set @x1 = 4; -- 在这里handler_type先使用exitset @x = 1;insert into users values(3,'zhaoliu',26);set @x = 2;insert into users values(4,'zhouqi',27);set @x = 3;END

在这里为了检验效果,我们设置的对异常的处理是将@x1设置为4。

再次调用该存储过程就不会报错了

select @x,@x1;

查询用户变量

c4b6bd0d18465e928664952c18dcacac.png

发现当出现异常时,程序会执行异常的处理并且退出该过程。

将过程中的handler_type改成continue,再次执行该过程,也不会出错。

查询用户变量

6b4975ba592bd8447ce0669ddfd48066.png

发现对于异常处理之后,会继续运行之后的代码

查询users表

dcb87fcf4f727d0f9e1018a8eb57303a.png

异常的插入语句没有执行,但是后面的没有发生异常的语句执行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值