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

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中心缩放,包含了缩放和平移两个操作&#xf…...

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,则最终输出的结果为?( &#xff…...

深入分析 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系统中的常用指令,帮助你高效地管理和维护你的系统。喜欢的话记得一键三连哦,方便找到它。 …...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

大话软工笔记—需求分析概述

需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

路由基础-路由表

本篇将会向读者介绍路由的基本概念。 前言 在一个典型的数据通信网络中&#xff0c;往往存在多个不同的IP网段&#xff0c;数据在不同的IP网段之间交互是需要借助三层设备的&#xff0c;这些设备具备路由能力&#xff0c;能够实现数据的跨网段转发。 路由是数据通信网络中最基…...