加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 钦州站长网 (https://www.0777zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL 程序出错的处理机制

发布时间:2022-10-25 10:44:42 所属栏目:MySql教程 来源:
导读:  1.概述

  我们有的时候向数据库中的表插入数据的时候,有时候因为没有注意到字段的约束,经常会出现错误,比如下面这种情况。

  我们可以看看表的结构,来看到底为什么会出错

  我们发现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编程网 - 钦州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!