mysql 异常处理

--该文章内容通过网络搜索组合,

mysql 异常,可以自定义异常,再应用。也可使用系统默认的异常,捕获应用。

一、异常定义:

DECLARE condition_name CONDITION FOR [condition_type];

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为数值类型错误代码;

举例:

定义“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;

二、异常处理

DECLARE handler_type HANDLER FOR condition_value [,...] sp_statement

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匹配数值类型错误代码;

举例:

//方法一:捕获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.实例

CREATE  PROCEDURE P_TEST_EXCEP()

BEGIN

DECLARE EXIT HANDLER for SQLEXCEPTION INSERT into TEST_LOG(id) VALUES(1);
INSERT into TEST(id) VALUES(1);
END

--当发生主键冲突时,向日志表插入数据。

时间: 2024-08-09 02:02:30

mysql 异常处理的相关文章

mysql异常处理

CREATE DEFINER=`root`@`localhost` PROCEDURE `pr_exception`(i_date varchar(10),out o_error_code varchar(200),out o_error_msg varchar(200)) BEGIN -- 自定义异常 DECLARE my_error CONDITION FOR SQLSTATE '45000'; DECLARE EXIT HANDLER FOR my_error begin set o_er

oracle 和mysql之间的数据类型对比

编号 ORACLE MYSQL 注释 1 NUMBER int / DECIMAL DECIMAL就是NUMBER(10,2)这样的结构INT就是是NUMBER(10),表示整型:MYSQL有很多类int型,tinyint mediumint bigint等,不同的int宽度不一样 2 Varchar2(n) varchar(n) 3 Date DATATIME 日期字段的处理MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE,包含年月日时分秒信息,用当前数据库的系统时

MySQL学习入门安装和启动及常见问题解决方法(一)

1.下载MySQL 官网地址:https://www.mysql.com/downloads/ 2.个人学习使用,只有下面这个是免费的 3.下载之后解压到目录中,并加入环境变量,如下 创建MYSQL_HOME 添加到path路径中 4.进入DOS环境启动mysql,win+R快捷键启动窗口输入cmd 进入MySQL是需要账号密码进行登陆的,账号密码默认都是"root" -u后面的root就是账号,输入-p后需要回车,提示输入密码后,输入root回车 5.启动mysql异常处理 5.1.

存储过程&Function

存储过程&Function 编号 类别 ORACLE MYSQL 注释 1 创建存储过程语句不同 create or replace procedure P_ADD_FAC(   id_fac_cd  IN ES_FAC_UNIT.FAC_CD%TYPE) is DROP PROCEDURE IF EXISTS `SD_USER_P_ADD_USR`;create procedure P_ADD_FAC(       id_fac_cd  varchar(100)) 1.在创建存储过程时如果存在

vagrant+docker:开发环境快速搭建

快速搭建以下的环境: 目录 VirtualBox Vagrant docker MySQL redis VirtualBox VM环境 Vagrant 成品镜像 $ vagrant box add centos-7 ./centos-7.0-x86_64.box $ vagrant init centos-7 $ vagrant up $ vagrant ssh 修改端口 管理员 $ su root # 密码 vagrant $ whoami 入门案例:https://www.cnblogs.c

MySQL存储过程的“异常处理”

Q:何为异常? A:程序在执行过程中有可能出错,运行时错误叫做异常. 默认情况下,当存储过程运行出错时,过程会立即终止,并打印系统错误消息. 实验环境: mysql> use TENNIS 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> 

关于MySQL的异常处理 Can't connect to MySQL server on localhost (10061)解决方法

首先检查MySQL 服务没有启动>如果没有启动,则要启动这个服务. 昨天,重起服务器后出现MySQL 'localhost' (10061)错误,开始以为是因为数据库链接打开过多,数据库资源耗尽的缘故,但是重启服务器以后,仍旧出现问题,于是在网上查找解决方法.大体如下: 解决办法: 第一步 删除c:\windows\下面的my.ini 第二步 打开c:\mysql\bin\winmysqladmin.exe 输入用户名 和密码 第三步 在dos下 输入 mysqld-nt -remove 删除服

Mysql存储过程(四)——异常处理

http://blog.csdn.net/crazylaa/article/details/5368421 有时候,不希望存储过程抛出错误中止执行,而是希望返回一个错误码. MySQL 支持异常处理,通过定义 CONTINUE/EXIT 异常处理的 HANDLER 来捕获 SQLWARNING/NOT FOUND/SQLEXCEPTION (警告 /无数据 / 其他异常).其中, FOR 后面可以改为 SQLWARNING, NOT FOUND, SQLEXCEPTION 来指示所有异常都处理,

mysql存储过程之异常处理篇

mysql存储过程也提供了对异常处理的功能:通过定义HANDLER来完成异常声明的实现 语法如下: DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement handler_type: CONTINUE | EXIT condition_value: SQLSTATE [VALUE] sqlstate_value | condition_name | SQLWARNING | NOT FOUND | SQLEXCEPT