二十异常捕获及处理详解
Posted biao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二十异常捕获及处理详解相关的知识,希望对你有一定的参考价值。
代码中被[]包含的表示可选,|符号分开的表示可选其一。
需求背景
我们在写存储过程的时候,可能会出现下列一些情况:
-
插入的数据违反唯一约束,导致插入失败
-
插入或者更新数据超过字段最大长度,导致操作失败
-
update影响行数和期望结果不一致
遇到上面各种异常情况的时,可能需要我们能够捕获,然后可能需要回滚当前事务。
本文主要围绕异常处理这块做详细的介绍。
此时我们需要使用游标,通过游标的方式来遍历select查询的结果集,然后对每行数据进行处理。
本篇内容
-
异常分类详解
-
内部异常详解
-
外部异常详解
-
掌握乐观锁解决并发修改数据出错的问题
-
update影响行数和期望结果不一致时的处理
准备数据
/*建库javacode2018*/
drop database if exists javacode2018;
create database javacode2018;
/*切换到javacode2018库*/
use javacode2018;
DROP TABLE IF EXISTS test1;
CREATE TABLE test1(a int PRIMARY KEY);
异常分类
我们将异常分为mysql内部异常和外部异常
mysql内部异常
当我们执行一些sql的时候,可能违反了mysql的一些约束,导致mysql内部报错,如插入数据违反唯一约束,更新数据超时等,此时异常是由mysql内部抛出的,我们将这些由mysql抛出的异常统称为内部异常。
外部异常
当我们执行一个update的时候,可能我们期望影响1行,但是实际上影响的不是1行数据,这种情况:sql的执行结果和期望的结果不一致,这种情况也我们也把他作为外部异常处理,我们将sql执行结果和期望结果不一致的情况统称为外部异常。
Mysql内部异常
示例1
test1表中的a字段为主键,我们向test1表同时插入2条数据,并且放在一个事务中执行,最终要么都插入成功,要么都失败。
创建存储过程:
以上是关于二十异常捕获及处理详解的主要内容,如果未能解决你的问题,请参考以下文章