MySQL 自定义函数(实验报告)
一、实验名称: 自定义函数
二、实验日期: 2024年 6 月 1 日
三、实验目的:
掌握MySQL自定义函数的创建及调用;
四、实验用的仪器和材料:
硬件:PC电脑一台;
配置:内存,2G及以上 硬盘250G及以上
软件环境:操作系统 windows7以上
数据库环境:MySQL5.7或MySQL8.0.20
五、实验步骤和方法
练习:
实验前建立的三个表:
# 实验前提:创建表并插入数据.记得跟MySQL交代好用哪个数据库CREATE TABLE `bookinfo` (`Bookid` varchar(30) NOT NULL,`ISBN` varchar(50) DEFAULT NULL,`Bookname` varchar(50) DEFAULT NULL,`Author` varchar(30) DEFAULT NULL,`Publisher` varchar(30) DEFAULT NULL,`Price` double DEFAULT NULL,`Booktype` varchar(20) DEFAULT NULL,`Orderdate` datetime DEFAULT NULL,`Bookstatus` varchar(50) DEFAULT NULL,PRIMARY KEY (`Bookid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `bookinfo` VALUES ('19-03-01-012024-8-1', '978-7-115-25547-1', '数据库系统原理及应用', '袁丽娜', '人民邮电出版社', '49', '专业基础', '2015-08-06 15:52:32', '在库');
INSERT INTO `bookinfo` VALUES ('19-03-01-012024-8-2', '978-7-302-54924-6', '网站设计与WEB应用开发技术', '张锦祥', '清华大学出版社', '76', '编程语言', '2020-04-10 15:55:13', '在库');
INSERT INTO `bookinfo` VALUES ('19-03-01-012024-8-7', '978-7-1116-5397-4', '数据库系统原理及应用', '胡孔法', '机械工业出版社', '45', '专业基础', '2020-06-16 16:16:13', '在库');
INSERT INTO `bookinfo` VALUES ('19-03-08-012024-8-5', '978-7-115-37950-4', '数据结构', '严蔚敏', '人民邮电出版社', '35', '编程语言', '2016-08-16 15:58:46', '在库');
INSERT INTO `bookinfo` VALUES ('19-03-08-012024-8-6', '978-7-121-24492-6', '数据仓库与数据挖掘实践', '李春葆', '电子工业出版社', '48', '实践类', '2014-11-06 15:56:54', '借出');CREATE TABLE `booklended` (`Bookid` varchar(30) NOT NULL,`Readerid` char(10) NOT NULL,`Lendtime` datetime NOT NULL,`Backtime` datetime DEFAULT NULL,PRIMARY KEY (`Bookid`,`Readerid`,`Lendtime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `booklended` VALUES ('19-03-01-012024-8-1', '1000002113', '2019-12-08 16:07:23', null);
INSERT INTO `booklended` VALUES ('19-03-01-012024-8-2', '1000001112', '2020-09-11 18:29:06', '2020-12-02 18:29:17');
INSERT INTO `booklended` VALUES ('19-03-08-012024-8-5', '1000001111', '2020-09-08 16:37:02', null);
INSERT INTO `booklended` VALUES ('19-03-08-012024-8-6', '1000001114', '2020-01-01 16:07:23', '2020-02-06 20:02:45');CREATE TABLE `reader` (`Readerid` char(10) NOT NULL,`Readername` varchar(15) DEFAULT NULL,`Tel` varchar(11) DEFAULT NULL,`Sf` varchar(4) DEFAULT NULL,`Sno` varchar(10) DEFAULT NULL,`Num` int DEFAULT NULL,`Sex` char(2) DEFAULT NULL,`Birth` datetime DEFAULT NULL,`Dept` varchar(50) DEFAULT NULL,`bz` varchar(20) DEFAULT NULL,PRIMARY KEY (`Readerid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `reader` VALUES ('1000001111', '李庆', '13785696235', '学生', '1904112234', '2', '男', '2001-06-16 00:00:00', '网络系', null);
INSERT INTO `reader` VALUES ('1000001112', '陈晨', '13825263695', '学生', '1804123695', '3', '男', '2000-07-21 16:02:31', '软件工程系', null);
INSERT INTO `reader` VALUES ('1000001114', '刘柳', '13623659465', '学生', '1704133695', '1', '女', '1999-12-16 16:05:05', '数码系', null);
INSERT INTO `reader` VALUES ('1000002113', '王建', '13925063698', '教师', null, '5', '男', '1983-03-10 16:03:33', '软件工程系', null);
1、创建一函数f_jysl,基于读者表reader和借阅表booklended ,根据传入参数读者姓名查询出其借阅书籍的数量,如果借阅书籍数量为空,则返回0。写出该自定义函数的代码,及调用该函数分别查询出读者姓名为“陈晨”“刘柳”的读者借阅书籍的数量。
2、创建一函数f_sjzt,基于书籍表bookinfo,根据传入参数书籍名称和出版社查询出书籍的状态,如果书籍状态为空,则返回“该书籍不存在”。写出该自定义函数的代码,及调用该函数分别查询出“人民邮电出版社”出版的《数据结构》书籍的状态及“电子工业出版社”出版的《数据结构》书籍的状态。
六、实验结果或结论:
创建函数f_jysl:
delimiter //Create function f_jysl(rname varchar(15)) returns intDETERMINISTICbegindeclare num1 int;set num1 := 0;select num INTO num1 from reader where Readername=rname; return num1 ; end //delimiter ;
调用该函数分别查询出读者姓名为“陈晨”“刘柳”的读者借阅书籍的数量:
select f_jysl('陈晨');select f_jysl('刘柳');


创建函数f_sjzt:
delimiter //Create function f_sjzt(bname varchar(15),pubname varchar(15))
returns varchar(20)DETERMINISTICbegindeclare status varchar(20);select bookstatus INTO status from bookinfo where Bookname = bname and Publisher = pubname ; if status is null then set status = '该书籍不存在';end if;return status ; end //delimiter ;
调用该函数分别查询出“人民邮电出版社”出版的《数据结构》书籍的状态及“电子工业出版社”出版的《数据结构》书籍的状态:
select f_sjzt('数据结构','人民邮电出版社');select f_sjzt('数据结构','电子工业出版社');


七、实验心得:
函数存储着一系列sql语句,调用函数就是一次性执行这些语句。所以函数可以降低语句重复。但注意的是函数注重返回值,不注重执行过程,所以一些语句无法执行。所以函数并不是单纯的sql语句集合。
函数与存储过程的区别:函数只会返回一个值,不允许返回一个结果集。函数强调返回值,所以函数不允许返回多个值的情况,即使是查询语句。
直接使用函数名()就可以调用,虽然这么说,但返回的是一个结果,sql中不使用select的话任何结果都无法显示出来(所以单纯调用会报错),如果想要传入参数可以使用函数名(参数)。
之所以使用DELIMITER是因为MySQL中默认是使用分号来结束一个命令的,我们定义的函数体中一条命令写完时会用分号来结束,而MySQL会误以为函数体已经定义完成,因为我们需要定义一个新的标识符来标识一个命令的结束,因为就可以使用DELIMITER。
相关文章:
MySQL 自定义函数(实验报告)
一、实验名称: 自定义函数 二、实验日期: 2024年 6 月 1 日 三、实验目的: 掌握MySQL自定义函数的创建及调用; 四、实验用的仪器和材料: 硬件:PC电脑一台; 配置:内存&#…...
一次职业院校漏洞挖掘
这个是之前挖掘到的漏洞,目前网站进行重构做了全新的改版,但是这个漏洞特别经典,拿出来进行分享。看到src上面的很多敏感信息泄露,所以自己也想找一个敏感信息泄露,官网如图: 发现在下面有一个数字校园入口…...
洪师傅代驾系统开发 支持公众号H5小程序APP 后端Java源码
代驾流程图 业务流程图 管理端设置 1、首页装修 2、师傅奖励配置 师傅注册后,可享受后台设置的新师傅可得的额外奖励; 例:A注册了师傅,新人奖励可享受3天,第一天的第一笔订单完成后可得正常佣金佣金*奖励比例 完成第二笔/第三笔后依次可得正常佣金佣金*奖励比例 完成的第四…...
View->Bitmap缩放到自定义ViewGroup的任意区域(Matrix方式绘制Bitmap)
Bitmap缩放和平移 加载一张Bitmap可能为宽高相同的正方形,也可能为宽高不同的矩形缩放方向可以为中心缩放,左上角缩放,右上角缩放,左下角缩放,右下角缩放Bitmap中心缩放,包含了缩放和平移两个操作…...
Centos 7部署NTP
介绍 NTP是Network Time Protocol(网络时间协议)的简称,它是用来通过互联网或局域网将计算机时钟同步到世界协调时间(UTC)的协议。 安装 # yum安装 yum install -y ntp# 离线安装 #下载地址:https://mir…...
【前缀和】42. 接雨水
本文涉及知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入&am…...
我的名字叫大数据
第1章 大家好,我叫大数据 1.1 我的家族传统:从我小小的祖先到壮大的我 1.1.1 最初的我:原始部落里的计数石头 大家好,我是你们人类文明的“老朋友”——大数据。你们知道吗?在我还没有变成你们手机、电脑里飞速跑动的那些数字前,我最初的模样可是一块块“计数石头”。…...
数据库漫谈-infomix
infomix数据库知名度不高,主要跟它的定位有关,它主要用于unix操作系统:Informix便是取自Information和Unix的结合,它也是第一个支持linux系统的数据库。它其实在金融、电信行业使用率非常高。98年,当时我在做银行领域的…...
【Qt】Qt界面美化指南:深入理解QSS样式表的应用与实践
文章目录 前言:1. 背景介绍2. 基本语法3. QSS 设置方式3.1. 设置全局样式3.2. 从文件加载样式表3.3. 使用 Qt Designer 编辑样式 总结: 前言: 在当今这个视觉至上的时代,用户界面(UI)的设计对于任何软件产…...
七彩云南文化旅游网站的设计
管理员账户功能包括:系统首页,个人中心,管理员管理,游客管理,导游管理,旅游景点管理,酒店信息管理 前台账户功能包括:系统首页,个人中心,论坛,旅…...
7-zip安装教程
一、简介 7-Zip 是一款开源的文件压缩软件,由 Igor Pavlov 开发。它具有高压缩比、支持多种格式、跨平台等特点。使用 C语言编写,其代码在 Github 上开源。 7-Zip的官网: 7-Zip 7-zip官方中文网站: 7-Zip 官方中文网站 7-Zip 的 G…...
oracle 12c DB卸载流程
1.运行卸载程序 [rootprimary1 ~]# su - oracle [oracleprimary1 ~]$ cd $ORACLE_HOME/deinstall [oracleprimary1 deinstall]$ ./deinstall Checking for required files and bootstrapping ... Please wait ... 这里选择3 、回车、y、y、回车、ASM 这里输入y 2.删除相关目录…...
Docker学习笔记 - 创建自己的image
目录 基本概念常用命令使用docker compose启动脚本创建自己的image 使用Docker是现在最为流行的软件发布方式, 本系列将阐述Docker的基本概念,常用命令,启动脚本和如何生产自己的docker image。 在我们发布软件时,往往需要把我…...
java web爬虫
目录 读取本地文件 从网站读取文件 java爬虫 总结 读取本地文件 import java.io.File; import java.io.PrintWriter; import java.util.Scanner;public class ReplaceText {public static void main() throws Exception{File file new File("basic\\test.txt"…...
MySQL开发教程和具体应用案例
一、MySQL开发教程 初识数据库 定义:数据仓库,安装在操作系统之上,用于存储和管理数据。 分类:关系型数据库(如MySQL、Oracle、SQL Server)和非关系型数据库(如Redis、MongoDB)。 SQL:结构化查询语言,用于管理和操作关系型数据库。 操作数据库 创建、修改、删除…...
QT C++ 模型视图结构 QTableView 简单例子
在Qt中,MVC模式被广泛使用于各种用户界面框架中,包括Qt的模型视图结构。Qt的模型视图结构是基于MVC模式设计的,其中包括了Model、View和Delegate三个部分。 QTableView是Qt模型视图结构中的一种视图,它用于以表格形式显示数据。 …...
2024年3月电子学会Python编程等级考试(四级)真题题库
2024年3月青少年软件编程Python等级考试(四级)真题试卷 题目总数:38 总分数:100 选择题 第 1 题 单选题 运行如下Python代码,若输入整数3,则最终输出的结果为?( ÿ…...
深入分析 Android BroadcastReceiver (一)
文章目录 深入分析 Android BroadcastReceiver (一)1. Android BroadcastReceiver 设计说明1.1 BroadcastReceiver 的主要用途 2. BroadcastReceiver 的工作机制2.1 注册 BroadcastReceiver2.1.1 静态注册2.1.2 动态注册 3. BroadcastReceiver 的生命周期4. 实现和使用 Broadca…...
2024医美如何做抖音医美抖音号,本地团购、短视频直播双ip爆品引流,实操落地课
课程下载:https://download.csdn.net/download/m0_66047725/89307619 更多资源下载:关注我。 课程内容: 01-0-序.mp4 02-01-账号定位.mp4 03-02-误区.mp4 04-03-五件套.mp4 05-04-文案怎么来.mp4 06-05-对标怎么弄.mp4 07-06-人设怎…...
Debian常用指令指南:高效管理你的Linux系统
Debian作为Linux发行版中的佼佼者,以其稳定性和安全性而闻名。掌握Debian的常用指令对于系统管理员和开发人员来说至关重要。本文将介绍一系列Debian系统中的常用指令,帮助你高效地管理和维护你的系统。喜欢的话记得一键三连哦,方便找到它。 …...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
