当前位置: 首页 > article >正文

mysql query 异常处理_MySQL异常处理

针对存储过程 、触发器或函数内部语句可能发生的错误或警告信息,需要进行相关异常或称 例外的捕捉,然后作出相应的处理,异常处理的方式如下:

DECLARE {CONTINUE | EXIT} HANDLER FOR {SQLSTATE sqlstate_code|MySQLerror code| condition_name} handler_actions

说明:

· Handler type (CONTINUE, EXIT) :处理类型,继续或退出

· Handler condition (SQLSTATE, MySQL error code, named condition) :触发条件

· Hander actions(错误触发的操作)

注意:a、 exit只退出当前的block。

b、 如果定义了handler_action,会在continue或exit之前执行。

发生错误的条件有:

· mysql错误代码

· 命名条件,可自定可使用系统内置的SQLEXCEPTION, SQLWARNING,和 NOT FOUND.

当同时使用MySQl错误码,标准SQLSTATE错误码,命名条件(SQLEXCEPTION)来定义错误处理时,其捕获顺序是(只可捕获一条错误):

MYSQL码->SQLSTATE->命名条件

作用域:

begni..end内,哪果错误处理定义在begin ... end内,则在该begin...end之外的错误不会被捕获。

它能够捕获其它储过程的错误。

关于作用域,以如下过程为例

drop table nums;

drop procedure pCreateNums;

CREATE TABLE nums (

id INT NOT NULL PRIMARY KEY,

b INT NOT NULL

);

delimiter $$

create procedure pCreateNums(cnt int)

begin

begin

declare continue handler for sqlexception rollback;

start transaction;

insert into nums(id,b) values(cnt+1,1);

insert into nums(id,b) values(cnt,null);

insert into nums(id,b) values(cnt+2,1);

commit;

end;

insert into nums values(100,100);

select * from nums;

end $$

delimiter ;

call pCreateNums(10);

nums表b字段为非空.

内部的begin end 由一个异常处理的定义,类型为continue

那么在执行到下面sql的时候

insert into nums(id,b) values(cnt,null);

触发异常处理,回顾了之前的SQL

但是后面的SQL继续执行.

外层的begin end块也会执行.

结果如下:

mysql> call pCreateNums(10);

+-----+-----+

| id  | b   |

+-----+-----+

|  12 |   1 |

| 100 | 100 |

+-----+-----+

2 rows in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

如果异常处理为Exit类型,则内层begin end 块回滚,内层其余SQL不再执行,

但是外层的SQL不受影响.因为异常处理是定义在内层的.

这就是异常处理的作用域.

结果如下:

mysql> call pCreateNums(10);

+-----+-----+

| id  | b   |

+-----+-----+

| 100 | 100 |

+-----+-----+

1 row in set (0.01 sec)

Query OK, 0 rows affected (0.01 sec)

当然,如果异常处理定义在外层。他的作用域就是整个过程.

参考:

http://blog.csdn.net/seteor/article/details/17791855

http://www.lryc.cn/news/2412978.html

相关文章:

  • 【原创】flv文件的三种下载方法
  • 干货|555定时器原理+3钟工作状态讲解,原理框图分析,通俗易懂
  • 如何免费做一个.com的网站
  • Flash2015安装教程(非常详细)从零基础入门到精通,看完这一篇就够了【附安装包】
  • 媒体知识一点点(1)———编解码
  • MyEclipse官方下载地址
  • QQ游戏外挂制作教程 (对对碰)
  • 高斯羽烟gis应用java实现模型计算
  • VMware 5.5.2和VMware6.0的序列号
  • 学前端的你,还在迷茫吗?快看看这些前端学习网站吧
  • 新东方雅思词汇(List 6 ~ List 10)
  • miui patchrom项目开发详细教程(Being updated)
  • 没有活动混音设备可用。要安装混音器设备,请转到控制面板,单击打印机和其他硬件,然后单击添加硬件
  • 强!eBook Edit Pro使用详尽教程
  • 北大天网实验室
  • MyEclipse 8.0注冊码+原版下载_Java开发软件
  • 细粒度更换Ext的EditorGridPanel的每个单元格编辑器
  • 用Dialog实现android 8种对话框
  • 我的外挂之路【一】按键精灵
  • 编写QQ外挂插件的原理和方法
  • Win7下MATLAB 7.0下载地址和详细安装
  • iPad及BT4下的WEP破解实验与分析 | Network Security
  • com网络资源
  • 龙将加速浏览器_chrome浏览器安装包下载-chrome浏览器完整安装包官方版下载
  • css 行高对齐 文字缩进 文字距离 文字的透明 文字阴影
  • 【计算机网络】初始网络原理(局域网 广域网 ip地址 端口号 协议通信)
  • 游戏外挂反外挂技术简介
  • 关于Qt的类继承
  • Red5入门教程(部分修改)
  • win8下不支持window phone SDK 的安装