MySQL 程序出错的处理机制
发布时间:2022-10-25 10:44:42 所属栏目:MySql教程 来源:
导读: 1.概述
我们有的时候向数据库中的表插入数据的时候,有时候因为没有注意到字段的约束,经常会出现错误,比如下面这种情况。
我们可以看看表的结构,来看到底为什么会出错
我们发现email
我们有的时候向数据库中的表插入数据的时候,有时候因为没有注意到字段的约束,经常会出现错误,比如下面这种情况。
我们可以看看表的结构,来看到底为什么会出错
我们发现email
|
1.概述 我们有的时候向数据库中的表插入数据的时候,有时候因为没有注意到字段的约束,经常会出现错误,比如下面这种情况。 我们可以看看表的结构,来看到底为什么会出错 我们发现email要求非空,但是这个时候我们插入数据的时候没有给Email赋值,就导致它为空,所以报错。我们很容易联想到,像Java这样的语言,当程序出现异常的时候,有对应的异常处理机制,比如throws,try catch finally,接下来我们来看看MySQL中是如何处理异常的。 在存储过程中未定义条件和处理程序,且当存储过程中执行的SQL语句报错时,MySQL数据库会抛出错误,并退出当前SQL逻辑,不再向下继续执行。 2.定义条件 DECLARE 错误名称 CONDITION FOR 错误码(或错误条件) 错误码的说明: 例如,在ERROR 1418 (HY000)中,1418是MySQL_error_code,'HY000’是sqlstate_value。例如,在ERROR 1142(42000)中MySQL 错误处理,1142是MySQL_error_code,'42000’是sqlstate_value。 举例: 定义“Field_Not_Be_NULL”错误名与MySQL中违反非空约束的错误类型是“ERROR 1048 (23000)”对应。 #使用MySQL_error_code DECLARE Field_Not_Be_NULL CONDITION FOR 1048; #使用sqlstate_value DECLARE Field_Not_Be_NULL CONDITION FOR SQLSTATE '23000'; 3.定义处理程序 可以为SQL执行过程中发生的某种类型的错误定义特殊的处理程序 语法: DECLARE 处理方式 HANDLER FOR 错误类型 处理语句 MySQL 错误处理_mysql 2003错误_mysql 函数分割符错误 定义处理程序的几种方式,代码如下: #方法1:捕获sqlstate_value DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02' SET @info = 'NO_SUCH_TABLE'; #方法2:捕获mysql_error_value DECLARE CONTINUE HANDLER FOR 1146 SET @info = 'NO_SUCH_TABLE'; #方法3:先定义条件,再调用 DECLARE no_such_table CONDITION FOR 1146; DECLARE CONTINUE HANDLER FOR NO_SUCH_TABLE SET @info = 'NO_SUCH_TABLE'; #方法4:使用SQLWARNING DECLARE EXIT HANDLER FOR SQLWARNING SET @info = 'ERROR'; #方法5:使用NOT FOUND DECLARE EXIT HANDLER FOR NOT FOUND SET @info = 'NO_SUCH_TABLE'; #方法6:使用SQLEXCEPTION DECLARE EXIT HANDLER FOR SQLEXCEPTION SET @info = 'ERROR'; 案例演示 在存储过程中,定义处理程序,捕获sqlstate_value值,当遇到MySQL_error_code值为1048时,执行CONTINUE操作,并且将@proc_value的值设置为-1。 DELIMITER // CREATE PROCEDURE UpdateDataNoCondition() BEGIN #定义处理程序 DECLARE CONTINUE HANDLER FOR 1048 SET @proc_value = -1; SET @x = 1; UPDATE employees SET email = NULL WHERE last_name = 'Abel'; SET @x = 2; UPDATE employees SET email = 'aabbel' WHERE last_name = 'Abel'; SET @x = 3; END // DELIMITER ; 调用存储过程 mysql> CALL UpdateDataWithCondition(); Query OK, 0 rows affected (0.01 sec) mysql> SELECT @x,@proc_value; +------+-------------+ | @x | @proc_value | +------+-------------+ | 3 | -1 | +------+-------------+ 1 row in set (0.00 sec) (编辑:PHP编程网 - 钦州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐




浙公网安备 33038102330484号