欢迎来到天天文库
浏览记录
ID:22376546
大小:83.50 KB
页数:12页
时间:2018-10-28
《mysql5的异常处理--》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、MySQL5的异常处理>> 1.SampleProblem:LogOfFailures问题样例:故障记录 当INSERT失败时,我希望能将其记录在日志文件中我们用来展示出错处理的问题样例是很普通的。我希望得到错误的记录。当INSERT失败时,我想在另一个文件中记下这些错误的信息,例如出错时间,出错原因等。我对插入特别感兴趣的原因是它将违反外键关联的约束 2.SampleProblem:LogOfFailures(2) mysql>CREATETABLEt2 1INT,PRIMARYKEY(s1)) eng
2、ine=innodb;// mysql>CREATETABLEt3(s1INT,KEY(s1), FOREIGNKEY(s1)REFERENCESt2(s1)) engine=innodb;// mysql>INSERTINTOt3VALUES(5);// ... ERROR1216(23000):CannotaddorupdateachildropleProblem:LogOfFailures CREATETABLEerror_log(error_message CHAR(80))// 下一
3、步就是建立一个在做插入动作出错时存储错误的表。 4.SampleProblem:LogOfErrors CREATEPROCEDUREp22(parameter1INT) BEGIN DECLAREEXITHANDLERFOR1216 INSERTINTOerror_logVALUES (CONCAT('Time:',current_date, '.ForeignKeyReferenceFailureFor Value=',parameter1)); INSERTINTOt
4、3VALUES(parameter1); END;// 上面就是我们的程序。这里的第一个语句DECLAREEXITHANDLER是用来处理异常的。意思是如果错误1215发生了,这个程序将会在错误记录表中插入一行。EXIT意思是当动作成功提交后退出这个复合语句。 5.SampleProblem:LogOfErrors CALLp22(5)// 调用这个存储过程会失败,这很正常,因为5值并没有在主键表中出现。但是没有错误信息返回因为出错处理已经包含在过程中了。t3表中没有增加任何东西,但是error_log表中记录下
5、了一些信息,这就告诉我们INSERTintotablet3动作失败。 DECLAREHANDLERsyntax声明异常处理的语法 DECLARE {EXIT
6、CONTINUE} HANDLERFOR {error-number
7、{SQLSTATEerror-string}
8、condition} SQLstatement 上面就是错误处理的用法,也就是一段当程序出错后自动触发的代码。MySQL允许两种处理器,一种是EXIT处理,我们刚才所用的就是这种。另一种就是我们将要演示的,CONTINUE处理,它跟EXIT
9、处理类似,不同在于它执行后,原主程序仍然继续运行,那么这个复合语句就没有出口了。 1.DECLARECONTINUEHANDLERexampleCONTINUE处理例子 CREATETABLEt4(s1int,primarykey(s1));// CREATEPROCEDUREp23() BEGIN DECLARECONTINUEHANDLER FORSQLSTATE'23000'SETx2=1; SETx=1; INSERTINTOt4VALUES(1); SETx=2; INSERT
10、INTOt4VALUES(1); SETx=3; END;// 这是MySQL参考手册上的CONTINUE处理的例子,这个例子十分好,所以我把它拷贝到这里。通过这个例子我们可以看出CONTINUE处理是如何工作的。 2.DECLARECONTINUEHANDLER声明CONTINUE异常处理 CREATETABLEt4(s1int,primarykey(s1));// CREATEPROCEDUREp23() BEGIN DECLARECONTINUEHANDLER FORSQLSTATE'230
11、00'SETx2=1;<-- SETx=1; INSERTINTOt4VALUES(1); SETx=2; INSERTINTOt4VALUES(1); SETx=3; END;// 这次我将为SQLSTATE值定义一个处理程序。还记得前面我们使用的MySQL错误代码1216
此文档下载收益归作者所有