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

MYSQL数据库MySQL定义异常和异常处理详解

发布时间:2020-12-12 02:35:49 所属栏目:MySql教程 来源:网络整理
导读:《MYSQL数据库MySQL定义异常和异常处理详解》要点: 本文介绍了MYSQL数据库MySQL定义异常和异常处理详解,希望对您有用。如果有疑问,可以联系我们。 MYSQL入门 在MySQL中,特定异常需要特定处理.这些异常可以联系到错误,以及子程序中的一般流程控制.定义异常

《MYSQL数据库MySQL定义异常和异常处理详解》要点:
本文介绍了MYSQL数据库MySQL定义异常和异常处理详解,希望对您有用。如果有疑问,可以联系我们。

MYSQL入门在MySQL中,特定异常需要特定处理.这些异常可以联系到错误,以及子程序中的一般流程控制.定义异常是事先定义程序执行过程中遇到的问题,异常处理定义了在遇到问题时对应当采取的处理方式,并且保证存储过程或者函数在遇到错误时或者警告时能够继续执行.?

MYSQL入门1 异常定义?

MYSQL入门1.1 语法?

MYSQL入门DECLARE condition_name CONDITION FOR [condition_type];?

MYSQL入门1.2 说明

MYSQL入门condition_name参数表示异常的名称;?
condition_type参数表示条件的类型,condition_type由SQLSTATE [VALUE] sqlstate_value|mysql_error_code组成:

MYSQL入门????? sqlstate_value和mysql_error_code都可以表示MySQL的错误;
???? ?sqlstate_value为长度为5的字符串类型的错误代码;
???? ?mysql_error_code为数值类型错误代码;?

MYSQL入门1.3 示例?
定义“ERROR 1148(42000)”错误,名称为command_not_allowed.可以有以下两种办法:?

MYSQL入门
//办法一:使用sqlstate_value 
DECLARE command_not_allowed CONDITION FOR SQLSTATE '42000′; 
//办法二:使用mysql_error_code 
DECLARE command_not_allowed CONDITION FOR 1148; 

MYSQL入门2 自定义异常处理?

MYSQL入门2.1 异常处理语法?

MYSQL入门DECLARE handler_type HANDLER FOR condition_value [,...] sp_statement?

MYSQL入门2.2 参数说明?

MYSQL入门handler_type: CONTINUE|EXIT|UNDO

MYSQL入门?handler_type为错误处理方式,参数为3个值之一;
?CONTINUE表示遇到错误不处理,继续执行;
?EXIT表示遇到错误时马上退出;
?UNDO表示遇到错误后撤回之前的操作,MySQL暂不支持回滚操作;?

MYSQL入门condition_value: SQLSTATE [VALUE] sqlstate_value| condition_name|SQLWARNING|NOT FOUND|SQLEXCEPTION|mysql_error_code

MYSQL入门?condition_value表示错误类型;
?SQLSTATE [VALUE] sqlstate_value为包含5个字符的字符串错误值;
?condition_name表示DECLARE CONDITION定义的错误条件名称;
?SQLWARNING匹配所有以01开头的SQLSTATE错误代码;
?NOT FOUND匹配所有以02开头的SQLSTATE错误代码;
?SQLEXCEPTION匹配所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE错误代码;
?mysql_error_code匹配数值类型错误代码;?

MYSQL入门2.3 异常捕获办法?

MYSQL入门
//办法一:捕获sqlstate_value异常 
//这种办法是捕获sqlstate_value值.如果遇到sqlstate_value值为”42S02″,执行CONTINUE操作,并输出”NO_SUCH_TABLE”信息 
DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02′ SET @info='NO_SUCH_TABLE'; 
//办法二:捕获mysql_error_code异常 
//这种办法是捕获mysql_error_code值.如果遇到mysql_error_code值为1146,并输出”NO_SUCH_TABLE”信息; 
DECLARE CONTINUE HANDLER FOR 1146 SET @info='NO_SUCH_TABLE'; 
//办法三:先定义条件,然后捕获异常 
DECLARE no_such_table CONDITION FOR 1146; 
DECLARE CONTINUE HANDLER FOR NO_SUCH_TABLE SET @info='NO_SUCH_TABLE';  
//办法四:使用SQLWARNING捕获异常 
DECLARE EXIT HANDLER FOR SQLWARNING SET @info='ERROR';  
//办法五:使用NOT FOUND捕获异常 
DECLARE EXIT HANDLER FOR NOT FOUND SET @info='NO_SUCH_TABLE';
//办法六:使用SQLEXCEPTION捕获异常 
DECLARE EXIT HANDLER FOR SQLEXCEPTION SET @info='ERROR';

MYSQL入门3 综合示例?

MYSQL入门创建一个表,设置该表的主键,在不定义异常处理和定义异常处理情况下看执行到哪一步.

MYSQL入门
show databases;
use wms;
create table location
(
location_id int primary key,location_name varchar(50)
); 

MYSQL入门示例1:不定义异常情况下

MYSQL入门
 DELIMITER //
CREATE PROCEDURE handlerInsertNoException()
BEGIN
 /*DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2=1;*/
 SET @x=1;
 INSERT INTO location VALUES (1,'Beijing');
 SET @x=2;
 INSERT INTO location VALUES (1,'Wuxi');
 SET @x=3;
END;
//
DELIMITER ; 

MYSQL入门调用存储过程与结果:

MYSQL入门
 mysql> call handlerInsertNoException();
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> select @x;
+------+
| @x  |
+------+
|  2 |
+------+
1 row in set (0.00 sec)
mysql> select * from location;
+-------------+---------------+
| location_id | location_name |
+-------------+---------------+
|      1 | Beijing    |
+-------------+---------------+
1 row in set (0.00 sec) 

MYSQL入门注意:操作示例2前要清空表中数据,并退出重新登录,以免客户端变量@x影响,详细说明参见结论中的第一点.

MYSQL入门
 mysql> truncate table location;
Query OK,0 rows affected (0.04 sec)
mysql> select * from location;
Empty set (0.00 sec)
mysql> exit;
Bye
david@Louis:~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 53
Server version: 5.5.38-0ubuntu0.14.04.1 (Ubuntu)
mysql> use wms;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from location;
Empty set (0.00 sec)
mysql> select @x;
+------+
| @x  |
+------+
| NULL |
+------+
1 row in set (0.00 sec)

MYSQL入门?示例2:定义异常处理情况下:

MYSQL入门
 DELIMITER //
CREATE PROCEDURE handlerInsertWithException()
BEGIN
 DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2=1;
 SET @x=1;
 INSERT INTO location VALUES (1,'Wuxi');
 SET @x=3;
END;
//
DELIMITER ; 

MYSQL入门调用存储过程与结果:

MYSQL入门
 mysql> CALL handlerInsertWithException();
Query OK,0 rows affected (0.09 sec)
mysql> select @x;
+------+
| @x  |
+------+
|  3 |
+------+
1 row in set (0.00 sec) 

MYSQL入门说明与结论:?

MYSQL入门一、MySQL中,@var_name表示用户变量,使用SET语句为其赋值,用户变量与连接有关,一个客户端定义的变量不能被其他客户端看到或者使用.当客户端退出时,该客户端连接的所有变量将自动释放.?

MYSQL入门二、在示例1中,由于注释了异常的声明”",此时向表中插入相同主键,就会触发异常,并且采取默认(EXIT)路径;且查看此时的@x返回2,表示下面的INSERT语句并没有执行就退出了.?

MYSQL入门三、定义了异常处理,此时遇到错误也会依照异常定义那样继续执行;但只有第一条数据被插入到表中,此时用户变量@x=3说明已经执行到了结尾;

MYSQL入门以上就是本文的全部内容,希望对大家的学习有所赞助,也希望大家多多支持编程之家PHP.

欢迎参与《MYSQL数据库MySQL定义异常和异常处理详解》讨论,分享您的想法,编程之家 52php.cn为您提供专业教程。

(编辑:李大同)

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

    推荐文章
      热点阅读