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 int

DETERMINISTIC

begin
   	
declare 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)


DETERMINISTIC


begin

declare 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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/668713.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构——图论详细笔记

一 图论基本概念 Directed Acyclic Graph (DAG) 二 图的存储 ①邻接矩阵(适用于稠密图) ②邻接表(适用于稀疏图) 三、图的遍历 ①深度优先搜索 //(基于邻接表实现,以有向图为例) //DFS:Depth First Search 深度优先搜索 //1、访问起始顶点 …

STM32学习和实践笔记(33):待机唤醒实验

1.STM32待机模式介绍 很多单片机具有低功耗模式,比如MSP430、STM8L等,我们的STM32也不例外。默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下,HCLK 为CPU提供时钟,并执行程序代码。这…

【GPU原理】1.线程和缓存的关系

一、GPU如何做并行计算 1.简单的串行计算 对于如上的运算AXY,每次运算我们需要从内存读取两个数据,一个是x[i],一个是y[i],最后存回y[i]。这里面有一个FMA的操作(融合乘加(FMA)指令是RISC处理器…

基于Qt GraphicView 解析 CIM/G 电力接线图文件

本文讲述了如何使用Qt的框架来渲染展示标准的CIM/G格式的图形文件,也就是公用信息模型(common information model,CIM)中的G文件部分的内容。这是一种电力系统图形的交换规则,用于电网图形交换。 [by amjieker] CIM/G …

Ai晚班车531

1.中央网信办等三部门:加快推进大模型、生成式人工智能标准研制。 2.中国石油与中国移动、华为、科大讯飞签署合作协议。 3.Opera浏览器与谷歌云合作,接入 Gemini 大模型。 4.谷歌 Gemini 加持Chromebook Plus。 5.英飞凌:开发 8kW和12kW…

《技术人求职之道》:从入职到离职,全方位解析求职艺术

一、引言二、内容:该求职专栏包含什么三、结果:通过该专栏你将收获什么四、说明:关于该专栏的一些问题解答五、后记 一、引言 求职,这是每个人职业生涯中必经的阶段,技术人亦不例外。上一个冬天的寒风已过&#xff0c…

获取 Bean 对象更加简单的方式

获取 bean 对象也叫做对象装配,是把对象取出来放到某个类中,有时候也叫对象注⼊。 对象装配(对象注⼊)即DI 实现依赖注入的方式有 3 种: 1. 属性注⼊ 2. 构造⽅法注⼊ 3. Setter 注⼊ 属性注入 属性注⼊是使⽤ Auto…

MySQL性能分析工具——EXPLAIN

性能分析工具——EXPLAIN 1、概述 定位了查询慢的SQL之后,我们就可以使用EXPLAIN或DESCRIBE工具做针对性的分析查询语句 。 DESCRIBE语句的使用方法与EXPLAIN语句是一样的,并且分析结果也是一样的。 MySQL中有专门负责优化SELECT语句的优化器模块&…

报表工具DataEase技术方案(二)

一、DataEase报表功能开发流程 1. 创建数据源 2. 创建数据集 可以创建多种来源的数据集,这里以SQL数据集为例。 数据集SQL中可以添加参数,仪表板展示数据时可以根据参数来筛选数据。 数据集添加计算字段 3. 创建仪表板 (1)组合…

关于Posix标准接口和Nuttx操作系统

基本介绍 主要参考: Linux 系统中的 POSIX 接口详细介绍_linux posix-CSDN博客 POSIX(Portable Operating System Interface,可移植操作系统接口)是由 IEEE(Institute of Electrical and Electronics Engineers&#x…

LLVM入门教学——SanitizerCoverage插桩(Linux)

1、介绍 LLVM 的 SanitizerCoverage 是一种代码覆盖工具,设计用于支持基于 fuzzing 的测试和其他安全相关工具。SanitizerCoverage 在编译时插桩代码,以在运行时收集覆盖信息,从而帮助识别未覆盖的代码路径,提高测试的有效性和全…

详细介绍运算符重载函数,清晰明了

祝各位六一快乐~ 前言 1.为什么要进行运算符重载? C中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C中重新定义这些运算符&#xff…

摄影后期照片编辑工具:LrC2024 for Mac/win 中文激活版

LrC2024(Lightroom Classic 2024)是 Adobe 公司推出的一款专业级别的照片编辑和管理软件。它是 Lightroom Classic CC 的升级版,具有更多的功能和改进。 这款软件主要用于数字摄影师和摄影爱好者处理、编辑和管理他们的照片。它提供了一套强大…

锅炉智能制造工厂工业物联数字孪生平台,推进制造业数字化转型

在制造业快速发展的今天,数字化转型已经成为企业提升竞争力的关键途径。锅炉智能制造工厂工业物联数字孪生平台,作为一种创新的技术解决方案,正以其独特的优势,为制造业的数字化转型提供强大动力。锅炉智能制造工厂工业物联数字孪…

【网络研究观】-20240531

战争揭开美国武器优势的面纱 随着俄军在哈尔科夫地区稳步推进,乌克兰战争对美国国防机器而言是一场灾难,这一点越来越明显,这不仅是因为我们的援助未能挽救乌克兰的撤退和可能的失败。更重要的是,这场战争无情地暴露了我们国防体…

我用大模型校稿出书的经验心得

1. 第一本AI校稿的书 我的新书《云计算行业进阶指南》已经出版,本书使用了大模型进行AI校对书稿。 在本文稿发布前,我问了好几个AI,AI都说“还没有出版书籍宣称自己使用了AI校稿”,因此我可以说: 本书是第一本公开宣称…

Docker搭建Redis主从 + Redis哨兵模式(一主一从俩哨兵)

我这里是搭建一主一从,俩哨兵,准备两台服务器,分别安装docker 我这里有两台centos服务器 主服务器IP:192.168.252.134 从服务器IP:192.168.252.135 1.两台服务器分别拉取redis镜像 docker pull redis 2.查看镜像 d…

编写备份MySQL 脚本

目录 环境准备 增量备份 增量备份和差异备份 完整代码如下 测试脚本是否正常 星期天运行脚本(完全备份) 星期一运备份脚本(增量备份) 星期二备份数据(其他天--增量备份) 星期三备份数据(差异备…

cobalt strike基础测试

下载链接4.3:https://pan.baidu.com/s/1E_0t30tFWRiE5aJ7F-ZDPg 链接4.0:https://pan.baidu.com/s/1SkMmDem3l6bePqIDgUz2mA 提取码:burp 一、简介: cobalt strike(简称CS)是一款团队作战渗透测试神器,分为客户端…

C++笔试强训day37

目录 1.旋转字符串 2.合并k个已排序的链表 3.滑雪 1.旋转字符串 链接https://www.nowcoder.com/practice/80b6bb8797644c83bc50ac761b72981c?tpId196&tqId37172&ru/exam/oj 如果 A 字符串能够旋转之后得到 B 字符串的话,在 A 字符串倍增之后的新串中&am…