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

【数据库——MySQL】(13)过程式对象程序设计——存储函数、错误处理以及事务管理

目录

  • 1. 存储函数
  • 2. 存储函数的应用
  • 3. 错误处理
  • 4. 抛出异常
  • 5. 事务处理
  • 6. 事务隔离级
  • 7. 应用实例
  • 参考书籍

1. 存储函数

  1. 创建 存储函数,需要用到 CREATE 语句:

    CREATE FUNCTION 存储函数名([参数名 类型, ...])RETURNS 类型[存储函数体]
    

    注意:存储过程名和存储函数名不能相同!

  2. 调用 存储函数,语法格式如下:

    存储函数名([参数, ...])
    

    :存储过程只能采用 CALL 语句直接调用,而存储函数则可以出现在各种语句中。

  3. 修改 存储函数,需要用到 ALTER 语句:

    ALTER FUNCTION 存储函数名 
    [COMMENT ‘string’| LANGUAGE SQL| {CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }| SQL SECURITY { DEFINER | INVOKER }
    }
    

    :上述修改语句只能修改存储函数的属性,不能修改功能!修改存储函数的功能,与修改存储过程功能一样也只能采取先删除后重新定义的方式实现

  4. 删除 存储函数,需要用到 DROP 语句:

    DROP FUNCTION [IF EXISTS] 存储函数名
    
  5. 注意在创建自定义存储函数的时候,需要提供权限

    set GLOBAL log_bin_trust_function_creators = 1;    # 创建自定义函数需要给权限
    

    :上述语句只需要在开启数据库时输入一次即可。

2. 存储函数的应用

【例 1】在数据库 score 中创建存储函数,要求通过给定的学号输出相对应的姓名。

drop FUNCTION if exists f1;
delimiter $
create FUNCTION f1(stu_id char(20))
returns varchar(20)    # 返回学生姓名
begindeclare sname varchar(20);select stu.`name` into snamefrom stuwhere stu.id = stu_id;return sname;
end$
delimiter ;
select f1('20191001') as Name;

在这里插入图片描述

【例 2】在数据库 score 中创建存储函数,要求输出每位学生的所修学分总数。

drop FUNCTION if exists getxf;
delimiter $
create FUNCTION getxf(stu_id char(20))
returns decimal(5,1)    # 返回学生总学分
begindeclare s decimal(5,1) default 0;   # 因为之后要求和,所以给个缺省值0select sum(if(score.score >= 60, lesson.xf, 0)) into sfrom score join lesson on score.LessonId = lesson.lessonidwhere score.stuId = stu_id;return s;
end$
delimiter ;
select stu.id, stu.`name`, IFNULL(getxf(stu.id),0) as 学分
from stu;

在这里插入图片描述

3. 错误处理

在执行 SQL 语句后,可能有时会出错,那么大家可以根据报错编号在 MySQL 手册里面查找出错原因。

错误处理语句:

DECLARE 处理动作 HANDLER FOR 条件值 ,...处理语句过程体

4. 抛出异常

我们还可以自定义错误代码以及抛出异常值:

SIGNAL SQLSTATE 错误编号(自定义,不能与系统已有编号重复)
SET message_text = 错误提示信息;

示例如下:

SIGNAL SQLSTATE '12345' 
set message_text = '证件号不存在';

5. 事务处理

  1. 关闭自动提交
    自动提交常用语银行系统中,比如小邓给森林转了 1 元的写博客助力费,那么这个动作应该是同步的,即小邓银行账户扣除 1 元,与此同时,森林银行账户增加 1 元(假设小邓银行账户刚好有 1 元,足够扣除)。不能说小邓银行账户扣除 1 元,但森林银行账户余额不变(比如转钱信号传输中受到干扰导致信号未正确传输)。

    这时候 关闭自动提交 就可以实现解决这种情况。当完成一系列操作后,只有手动提交事务,才能算是实现了之前的所有操作!

    SET @@AUTOCOMMIT = 0;
    

    :默认是开启自动提交的,即 SET @@AUTOCOMMIT = 0;

  2. 开始事务

    START TRANSACTIONSQL语句
    
  3. 结束事务

    COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
    
  4. 撤销事务

    ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
    
  5. 回滚事务到指定点
    回滚前需要先设置一个保存点:

    SAVEPOINT 保存点名
    

    然后才可以回滚事务:

    ROLLBACK [WORK] TO SAVEPOINT 保存点名
    

6. 事务隔离级

  1. 脏读(dirty reads):一个事务读取了另一个未提交的并行事务写的数据。
  2. 不可重复读(non-repeatable reads):一个事务重新读取前面读取过的数据, 发现该数据已经被另一个已提交的事务修改过。
  3. 幻读(phantom read):一个事务重新执行一个查询,返回一套符合查询条件的行, 发现这些行因为其他最近提交的事务而发生了改变。

以上 3 种情况是我们不想看见的。

SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVELSERIALIZABLE					//可序列化| REPEATABLE READ				//可重复读| READ COMMITTED				//提交读| READ UNCOMMITTED				//未提交读

如果指定GLOBAL,那么定义的隔离级将适用于所有的SQL用户;如果指定SESSION,则隔离级只适用于当前运行的会话和连接。

基于 ANSI/ISO SQL 规范,MySQL 提供了 4 种隔离级:序列化、可重复读、提交读和未提交读

查看当前事务隔离级:

SELECT @@TRANSACTION_ISOLATION;

7. 应用实例

请自行创建数据库 bank,并在里面新建一个表 account,表内容如下:

在这里插入图片描述

下面完成转账操作:

set @@autocommit = 0;    # 关闭自动提交功能select * from account;update account
set ck = ck - 500
where id = '001';SAVEPOINT a;    # 保存点(rollback时只撤销后面的操作)update account
set ck = ck + 500
where id = '002';select * from account;

此时还未提交事务,大家可以在可视化界面刷新表 account,发现数据并没有更新。这是因为我们关闭了自动提交,因此要手动提交事务:

COMMIT;

在这里插入图片描述

参考书籍

《MySQL实用教程(第4版)》

上一篇文章:【数据库——MySQL】(12)过程式对象程序设计——存储过程

相关文章:

【数据库——MySQL】(13)过程式对象程序设计——存储函数、错误处理以及事务管理

目录 1. 存储函数2. 存储函数的应用3. 错误处理4. 抛出异常5. 事务处理6. 事务隔离级7. 应用实例参考书籍 1. 存储函数 要 创建 存储函数,需要用到 CREATE 语句: CREATE FUNCTION 存储函数名([参数名 类型, ...])RETURNS 类型[存储函数体]注意&#xff1…...

Spring Boot的魔法:构建高性能Java应用

文章目录 Spring Boot:简化Java开发Spring Boot的性能优势1. 内嵌服务器2. 自动配置3. 起步依赖4. 缓存和优化5. 异步处理 实际示例:构建高性能的RESTful API总结 🎉欢迎来到架构设计专栏~Spring Boot的魔法:构建高性能Java应用 ☆…...

如何做好测试?(七)兼容性测试 (Compatibility Testing, CT)

1. 兼容性测试介绍 兼容性测试 (Compatibility Testing, CT)是一种软件测试方法,旨在验证应用程序在不同操作系统、浏览器、设备和网络环境下的正确运行和一致性。对于网上购物系统来说,兼容性测试非常重要,因为用户可能使用各种不同的设备和…...

经典循环神经网络(一)RNN及其在歌词数据集上的应用

经典循环神经网络(一)RNN及其在歌词数据集上的应用 1 RNN概述 在深度学习兴起之前,NLP领域一直是统计模型的天下,例如词对齐算法GIZA,统计机器翻译开源框架MOSES等等。在语言模型方向,n-gram是当时最为流行的语言模型方法。n-gr…...

docker+mysql+flask+redis+vue3+uwsgi+docker部署

首先拉取mysql的镜像,这里用的mysql5.7.6 docker pull mysql:5.7.6 镜像拉取完成后启动: docker run --name my-mysql -d -p 3306:3306 -v /usr/local/my-mysql/conf:/etc/mysql/conf.d -v /usr/local/my-mysql/data:/var/lib/mysql -e MYSQL_ROOT_PA…...

Spring boot接收zip包并获取其中excel文件的方法

1、问题 工作中遇到一个需求&#xff0c;接收一个zip包&#xff0c;读取其中的excel文件并处理&#xff0c;减少用户多次选择目录和文件的痛点&#xff0c;该zip包包含多级目录 2、依赖 需要用到apache的Workbook类来操作Excel&#xff0c;引入以下依赖 <dependency>&l…...

Ubuntu镜像源cn.arichinve.ubuntu.com不可用原因分析和解决

文章目录 Ubuntu查看系统版本Ubuntu更新系统不能更新Ubuntu查看APT更新源配置cn.archive.ubuntu.com已经自动跳转到清华镜像站Ubuntu变更镜像源地址备份原文件批量在VIM中变更 Ubuntu国内镜像站推荐推荐阅读 今天想要在Ubuntu环境下搭建一个测试环境&#xff0c;进入Ubuntu系统…...

Java基础面试,String,StringBuffer,StringBuilder区别以及使用场景

简单的几句 String是final修饰的&#xff0c;不可变&#xff0c;每次操作都会产生新的对象。StringBuffer和StringBuilder都是在原对象上进行操作StringBuffer是线程安全的&#xff0c;StringBuilder是线程不安全的。StringBuffer方法是被synchronized修饰的 所以在性能方面大…...

基于SpringBoot的高校学科竞赛平台

目录 前言 一、技术栈 二、系统功能介绍 竞赛题库管理 竞赛信息管理 晋级名单管理 往年成绩管理 参赛申请管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步…...

excel如何让线条消失,直接设置网格即可,碰到不方便的地方优先百度,再采取蛮干

怎么将excel表格中的隐形线条去掉...

抖音短视频seo矩阵系统源代码开发系统架构及功能解析

短视频seo源码&#xff0c;短视频seo矩阵系统底层框架上支持了从ai视频混剪&#xff0c;视频批量原创产出&#xff0c;云存储批量视频制作&#xff0c;账号矩阵&#xff0c;视频一键分发&#xff0c;站内实现关键词、短视频批量搜索排名&#xff0c;数据统计分类多功能细节深度…...

在pycharm中弹出图后,需要关闭才会显示Process finished with exit code 0

在pycharm中弹出图后&#xff0c;需要关闭才会显示Process finished with exit code 0 在PyCharm中&#xff0c;当你运行一个Python程序并弹出一个图形窗口时&#xff0c;程序会等到图形窗口关闭后才会显示 “Process finished with exit code 0” 的消息。 这是 由于代码执行…...

【计算机网络笔记六】应用层(三)HTTP 的 Cookie、缓存控制、代理服务、短连接和长连接

HTTP 的 Cookie HTTP 的 Cookie 机制要用到两个字段&#xff1a;响应头字段 Set-Cookie 和请求头字段 Cookie。 Cookie 可以设置多个 key-value 对&#xff0c; 响应头中可以设置多个 Set-Cookie 字段&#xff0c;请求头Cookie后面可以设置多个键值对&#xff0c;用分号隔开&a…...

Vue中的数据分页与分页组件设计

Vue中的数据分页与分页组件设计 在前端开发中&#xff0c;数据分页是一个常见的需求&#xff0c;特别是当处理大量数据时。Vue作为一款流行的JavaScript框架&#xff0c;提供了强大的工具和生态系统来实现数据分页。本文将介绍如何在Vue中进行数据分页&#xff0c;以及如何设计…...

TCP串流场景剖析

在TCP&#xff08;传输控制协议&#xff09;中&#xff0c;串流场景指的是数据通过TCP连接以流&#xff08;stream&#xff09;的方式传输。TCP是一种可靠的、面向连接的传输协议&#xff0c;它将数据切分为多个报文段&#xff0c;通过网络传输&#xff0c;并在接收端进行重组&…...

Windows历史版本下载

1、微PE工具箱&#xff08;非广告本人常用&#xff09; 常用安装Windows系统的微PE工具 地址&#xff1a;https://www.wepe.com.cn/download.html 2、Windows系统下载地址&#xff08;非微软官方&#xff09; 地址&#xff1a;MSDN, 我告诉你 - 做一个安静的工具站 下载&…...

企业级磁盘阵列存储系统由硬到软全析

企业级磁盘阵列是由一组设备构成的存储系统,主要包括两种类型的设备,分别是控制器和扩展柜,其中控制器只有一台,扩展柜可以没有,也可以有多台。在EMC的Unity中分别称为DPE(Disk Processor Enclosure)和DAE(Disk Array Enclosure),在华为的OceanStor里面称为控制框和硬…...

V4L2 驱动架构介绍

V4L2 简介 Video for Linux two(Video4Linux2)简称 V4L2&#xff0c;是 V4L 的改进版。V4L2 是 linux操作系统下用于视频和音频数据采集设备的驱动框架&#xff0c;为驱动和应用程序提供了一套统一的接口规范。 在 Linux 下&#xff0c;所有外设都被看成一种特殊的文件&#xf…...

掌握这些技巧,让Excel批量数据清洗变得简单高效!

什么是数据清洗 数据清洗是指在数据处理过程中对原始数据进行筛选、转换和修正&#xff0c;以确保数据的准确性、一致性和完整性的过程。它是数据预处理的一部分&#xff0c;旨在处理和纠正可能存在的错误、缺失值、异常值和不一致性等数据质量问题。 为什么要数据清洗 Exce…...

成都瀚网科技:抖音上线地方方言自动翻译功能

为了让很多方言的地域历史、文化、习俗能够以短视频的形式生产、传播和保存&#xff0c;解决方言难以被更多用户阅读和理解的问题&#xff0c;平台正式上线推出当地方言自动翻译功能。创作者可以利用该功能&#xff0c;将多个方言视频“一键”转换为普通话字幕供大众观看。 具体…...

【k8s】【docker】web项目的部署

yaml配置文件 后端&#xff1a;springboot项目 前端&#xff1a;vue项目&#xff0c;之前镜像封装的nginx.conf反向代理配置直接使用了docker-compose.yml中services的名称&#xff0c;无法代理成功&#xff0c;可修改为127.0.0.1 # 后端 apiVersion: apps/v1 kind: Deployment…...

【视频去噪】基于全变异正则化最小二乘反卷积是最标准的图像处理、视频去噪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

国庆day3---网络编程知识点脑图整合

...

链表经典面试题(六)

判断链表是否有环 1.题目2.思路分析(文字)3.详细的注释和代码实现 1.题目 2.思路分析(文字) 3.详细的注释和代码实现 public class Solution {public boolean hasCycle(ListNode head) {//定义两个快慢指针ListNode fast head;ListNode slow head;//让快指针走两步,慢指针走…...

SM2签名算法中随机数K的随机性对算法安全的影响

一、构造如下SM2签名算法过程1 Sig1 r1 F2BFC778C66127C74E3613FAA1AB6E207059740B317597A78BBFCDF58AED0A51 Sig1 s1 4FC719D00334CCC23098036DEEAA71DB464A076EFA79283389D3414D70659E88 私钥d B3124DC843BB8BA61F035A7D0938251F5DD4CBFC…...

郁金香2021年游戏辅助技术中级班(六)

郁金香2021年游戏辅助技术中级班&#xff08;六&#xff09; 055-ce,xdbg调试分析接任务交任务完成任务056-C,C写代码测试接任务交任务完成任务我们再来分析一下完成任务 057-C,C写代码测试交任务完成任务 055-ce,xdbg调试分析接任务交任务完成任务 创建一个新角色&#xff0c…...

毛玻璃员工卡片悬停效果

效果展示 页面结构组成 通过效果展示图&#xff0c;我们可以看出页面布局比较常规&#xff0c;最核心的就是卡片&#xff0c;当鼠标没有悬停在卡片上时&#xff0c;文字和头像处于半透明状态&#xff0c;当鼠标悬停在卡片上是&#xff0c;底部会展示社交图标。 CSS 知识点 b…...

闪存工作原理

前言 1、闪存类型 闪存有两种分类&#xff0c;NAND型闪存主要用于存储 2、MOS的特性 MOS管的三个引脚分别是Gate&#xff08;G&#xff09;、Source&#xff08;S&#xff09;和Drain&#xff08;D&#xff09;。Gate&#xff08;G&#xff09;引脚是晶闸管的控制引脚&…...

从0到一配置单节点zookeeper

我的软件&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1nImkjOgzPkgaFOuUPwd1Sg?pwd2wqo 提取码&#xff1a;2wqo 视频教程p1-zookeeper安装和配置以及启动服务和检测是否运行成功_哔哩哔哩_bilibili 一、安装zookeeper http://zookeeper.apache.org/releases.h…...

【JVM】第三篇 JVM对象创建与内存分配机制深度剖析

目录 一. JVM对象创建过程详解1. 类加载检查2. 分配内存2.1 如何划分内存?2.2 并发问题3. 初始化4. 设置对象头5. 执行<init>方法二. 对象头和指针压缩详解三. JVM对象内存分配详解四.逃逸分析 & 栈上分配 & 标量替换详解1. 逃逸分析 & 栈上分配2. 标量替换…...

医院咨询男科/seo推广软

我有个有趣的观察&#xff0c;外企公司多的是25-35岁的白领&#xff0c;40岁以上的员工很少&#xff0c;二三十岁的外企员工是意气风发的&#xff0c;但外企公司40岁附近的经理人是很尴尬的。我见过的40岁附近的外企经理人大多在一直跳槽&#xff0c;最后大多跳到民企&#xff…...

免费的游戏网站建设/跨国网站浏览器

测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 having关键字对group by分组后的数据进行过滤having支持where的所有操作符和语法 where 和 having 的一些差异性 wherehaving不可以使用聚合函数可以使用聚合函数数据 group by 前过…...

青岛网站建/如何让网站被百度收录

大家在刷java的面试题的时候应该有遇到i&#xff0c;i&#xff0c;i--&#xff0c;--i这类的面试题吧。我们来看一下下面这段代码&#xff0c;大家觉得执行结果会是什么呢&#xff1f;怎么样&#xff0c;i初始值是0&#xff0c;循环加了10次&#xff0c;结果输出10。是这样吗&a…...

企业网站模板html下载/网站优化靠谱seo

[VM-虚拟机]重新导入虚拟环境启动报错 Writed by semiter 版权所有&#xff0c;文章允许转载&#xff0c;但必须以链接方式注明源地址&#xff0c;否则追究法律责任! OS:win7 32bit vmware server:2.0.2 情形一&#xff1a; 重装系统后&#xff0c;机器名称改变了&#xff0…...

福建省住房和城乡建设部网站/域名免费注册

文章概述&#xff1a; 一、逻辑卷存储概念 二、逻辑卷管理器 三、管理物理卷 四、管理卷组 AIX的存储管理和逻辑卷管理&#xff08;Logical Volume Management&#xff0c;LVM&#xff09; 一、逻辑卷存储概念 五个基本的逻辑卷存储概念&#xff1a;物理卷&#xff08;PV&am…...

深圳网站制作公司信息/现在最火的推广平台

来自美国爱荷华大学VIB-UGent医学生物技术中心和其他合作者的研究人员开发了一种新的方法来更好地理解我们免疫系统的基本防御机制。中心是ISG15&#xff0c;一种在免疫系统中起作用的小蛋白。有了这种新开发的方法&#xff0c;科学家现在可以识别和研究带有ISG15标记的蛋白质&…...