mysql异常

mysql异常

定义

mysql中,可以根据需要,自己定义异常,语法如下:

DECLARE condition_name CONDITION 
		FOR condition_value [, condition_value] ... ;
-- condition_name:是自己起的名字,最好见名知意。
-- condition_value:可以是:
	-- sqlstate_value:长度为5的字符串错误代码。
	-- mysql_error_value:数值类型的错误代码。

处理

mysql中,用于处理指定异常的handler语法如下:

DECLARE handler_type HANDLER 
		FOR condition_value [,condition_value] ...
		sp_statement;
-- handler_type:有三个取值
	-- CONTINUE:遇到错误不进行处理,跳过错误继续执行之后的代码。
	-- EXIT:遇到错误时马上退出handler所在的begin end区块,不再执行之后的操作。
	-- UNDO:遇到错误后撤回之前已经执行的操作,MySQL暂不支持该操作。
-- condition_value:错误名称,可以包含多个,有以下6种取值:
	-- condition_name:定义异常时取的名字
	-- mysql_error_value:数值类型的错误代码
	-- sqlstate_value:长度为5的字符串错误代码。
	-- QLWARNING:代表所有01开头的SQLSTATE代码
	-- NOT FOUND:代表所有01开头的SQLSTATE代码
	-- SQLEXCEPTION:代表除SQLWARNING和NOT FOUND之外的SQLSTATE代码
-- sp_statement:异常之后的处理。

异常处理的例子:

-- 在FETCH语句获取不到记录的时候(游标对应的结果集已经被遍历一遍,游标不指向任何记录时),
-- 如果声明如下语句,服务器就会执行对应的可执行语句(可执行语句可以用来结束循环)
CREATE PROCEDURE cursor_demo()
BEGIN
    -- 声明变量
    DECLARE m_value INT;
    DECLARE n_value CHAR(1);
    DECLARE not_done INT DEFAULT 1;

    -- 声明游标
    DECLARE t1_record_cursor CURSOR FOR SELECT m1, n1 FROM t1; 

    -- 在游标遍历完记录的时候将变量 not_done 的值设置为 0,并且不再执行后边的语句
    DECLARE EXIT HANDLER FOR NOT FOUND SET not_done = 0;

    -- 使用游标遍历
    OPEN t1_record_cursor;

    WHILE not_done = 1 DO
        FETCH t1_record_cursor INTO m_value, n_value; 
        SELECT m_value, n_value, not_done;
    END WHILE;

    CLOSE t1_record_cursor;
END

异常代码和信息

mysql中自带的异常代码和信息有两种表示方式:mysql_error_code和SQLSTATE [VALUE] sqlstate_value。

mysql_error_code

一个4位数字,mysql自己定义的错误代码,参见链接

SQLSTATE [VALUE] sqlstate_value

5个字符组成的字符串,同mysql_error_code一一对应,从ANSI SQL和ODBC这些标准中引用过来的,因此更加标准化,而不像上面的error_code完全是mysql自己定义给自己用的。

参考文献

https://blog.csdn.net/weixin_37839711/article/details/81506723 Mysql的异常处理

https://www.cnblogs.com/aixinyiji/p/11038635.html Mysql中的异常处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值