您现在的位置是:亿华云 > 应用开发
MySQL定义异常和异常处理详解
亿华云2025-10-09 12:57:30【应用开发】3人已围观
简介在MySQL中,特定异常需要特定处理。这些异常可以联系到错误,以及子程序中的一般流程控制。定义异常是事先定义程序执行过程中遇到的问题,异常处理定义了在遇到问题时对应当采取的处理方式,并且保证存储过程或
在MySQL中,义异异常特定异常需要特定处理。常和处理这些异常可以联系到错误,详解以及子程序中的义异异常一般流程控制。定义异常是常和处理事先定义程序执行过程中遇到的问题,异常处理定义了在遇到问题时对应当采取的详解处理方式,并且保证存储过程或者函数在遇到错误时或者警告时能够继续执行。义异异常
1 异常定义
1.1 语法
DECLARE condition_name CONDITION FOR [condition_type];1.2 说明
condition_name参数表示异常的常和处理名称;
condition_type参数表示条件的类型,condition_type由SQLSTATE [VALUE] sqlstate_value|mysql_error_code组成:
sqlstate_value和mysql_error_code都可以表示MySQL的详解错误; sqlstate_value为长度为5的字符串类型的错误代码; mysql_error_code为数值类型错误代码;1.3 示例
定义“ERROR 1148(42000)”错误,名称为command_not_allowed。义异异常可以有以下两种方法:
方法一:使用sqlstate_value
DECLARE command_not_allowed CONDITION FOR SQLSTATE ’42000′;方法二:使用mysql_error_code
DECLARE command_not_allowed CONDITION FOR 1148;2 自定义异常处理
2.1 异常处理语法
DECLARE handler_type HANDLER FOR condition_value [,常和处理...] sp_statement
2.2 参数说明
handler_type: CONTINUE|EXIT|UNDO
handler_type为错误处理方式,参数为3个值之一; CONTINUE表示遇到错误不处理,详解继续执行; EXIT表示遇到错误时马上退出;UNDO表示遇到错误后撤回之前的义异异常操作,站群服务器MySQL暂不支持回滚操作;
condition_value: SQLSTATE [VALUE] sqlstate_value| condition_name|SQLWARNING|NOT FOUND|SQLEXCEPTION|mysql_error_code
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匹配数值类型错误代码;2.3 异常捕获方法
方法一:捕获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,执行CONTINUE操作,并输出”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’;3 综合示例
创建一个表,设置该表的主键,在不定义异常处理和定义异常处理情况下看执行到哪一步。
show databases;use wms; create table location ( location_id int primary key, location_name varchar(50) );示例1:不定义异常情况下
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> call handlerInsertNoException(); ERROR 1062 (23000): Duplicate entry 1 for key PRIMARYmysql> 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)注意:操作示例2前要清空表中数据,并退出重新登录,以免客户端变量@x影响,详细说明参见结论中的网站模板***点。
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 53Server 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)示例2:定义异常处理情况下:
DELIMITER //CREATE PROCEDURE handlerInsertWithException()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> CALL handlerInsertWithException(); Query OK, 0 rows affected (0.09 sec) mysql> select @x; +------+| @x |+------+| 3 |+------+1 row in set (0.00 sec)说明与结论:
一、MySQL中,@var_name表示用户变量,使用SET语句为其赋值,用户变量与连接有关,一个客户端定义的变量不能被其他客户端看到或者使用。当客户端退出时,该客户端连接的所有变量将自动释放。
二、在示例1中,由于注释了异常的声明”",此时向表中插入相同主键,就会触发异常,并且采取默认(EXIT)路径;且查看此时的@x返回2,表示下面的INSERT语句并没有执行就退出了.
三、定义了异常处理,此时遇到错误也会按照异常定义那样继续执行;但只有***条数据被插入到表中,此时用户变量@x=3说明已经执行到了结尾;
云服务器很赞哦!(93356)
相关文章
- 为什么现在中文域名觉得好?使用中文域名有什么好处?
- 付款完成后,您只需耐心等待,如果您注册成功,系统会提示您。这里需要注意的是,域名是一个即时产品,只有在最终付款成功时才能预订,注册成功后不能更改。
- 2. 不要花大价钱买域名,新手鉴别能力不足,容易投资失误。
- 顶级域名可以增加企业品牌的价值。随着经济的快速发展,域名已不再是企业在网络中的独立地位。顶级域名的服务范围、企业产品、综合形象体现等,对于企业单位来说,顶级域名的重要性不言而喻。
- 只要我们做的是从目前的市场情况选择域名,从简单易记,从个性特征上,我们就可以找到一个好域名进行注册。域名注册进行域名记录和解析以及绑定网站后,客户可以通过URL登录您的网站。
- 3.dns修改成功后,点击“域名解析”,按提示进行操作。解析格式一般如下:
- 4.选择顶级的域名注册服务商
- 4、club娱乐
- 审核通过的域名将显示在域名竞拍页面,并进入正式拍卖期,买家可以在拍卖周期内出价,加价幅度与拍卖保证金说明,点此查看。
- .com域名是国际最广泛流行的通用域名,目前全球注册量第一的域名,公司企业注册域名的首选。国际化公司通常会注册该类域名。
热门文章
- 2、根据用户基础选择访问提供程序。由于互联问题的存在,接入商的选择也非常重要,如果用户群主要在联通,尽量选择联通接入较好的接入商,如果用户群主要在电信,那么选择电信接入较好的接入商。如果用户组位于国家/地区,则选择更好的访问提供程序进行交互。
- 当投资者经过第二阶段的认真学习之后又充满了信心,认为自己可以在市场上叱咤风云地大干一场了。但没想到“看花容易绣花难”,由于对理论知识不会灵活运用.从而失去灵活应变的本能,就经常会出现小赢大亏的局面,结果往往仍以失败告终。这使投资者很是困惑和痛苦,不知该如何办,甚至开始怀疑这个市场是不是不适合自己。在这种情况下,有的人选择了放弃,但有的意志坚定者则决定做最后的尝试。
- 4、club娱乐
- 以上的就是为大家介绍的关于域名的详解