MySQL 自定义函数(实验报告)

news2024/11/16 13:27:39

一、实验名称: 自定义函数 

二、实验日期:  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。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LabVIEW实现汽车逆变器功能测试系统

​介绍了如何利用LabVIEW开发汽车逆变器(包括功率板和控制板)的自动测试设备(ATE),实现对额定800V电压、300A电流的逆变器进行功能测试。系统通过CAN2.0通讯协议,实现电机控制、温度传感器监测、电压校验和…

docker一键部署EFK系统(elasticsearch filebeat kibana metricbeat es-head)

EFK日志系统搭建 EFK日志系统介绍功能需求搭建elasticsearch集群规划前提部署核对证书及权限 EFK日志系统介绍 Elasticsearch 是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通常用于索引和搜索大量日志数据,也可用于…

7、css3实现边框不停地跑动效果

效果例图&#xff1a; 1、上html代码&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><meta …

百分之九十的人都忽视了JMeter响应断言中的这个实用功能—— Jmeter Variable Name to use

JMeter的响应断言 相信对于使用过JMeter的同学来学&#xff0c;一定都使用过响应断言&#xff0c;在这里我就不相信介绍了&#xff0c;我们可以简单的理解为&#xff1a; JMeter的响应断言是一种用于检查测试中得到的响应数据是否符合预期的工具&#xff0c;旨在保证性能测试…

挑战你的数据结构技能:复习题来袭【6】

1. (单选题)设无向图的顶点个数为n,则该图最多有&#xff08;&#xff09;条边 A. n-1 B. n(n-1)/2 C. n(n1)/2 D. 0 答案&#xff1a;B 分析&#xff1a; 2. (单选题)含有n个顶点的连通无向图,其边的个数至少为()。 A. n-1 B. n C. n1 D. nlog2n 答案&#xff1a;A…

产品经理的“高光”时刻,你中了几个?

作为产品经理&#xff0c;都有着这样一个闪闪发光的梦&#xff0c;就是看着自己的产品从0到DAU过万、过十万&#xff0c;甚至是过百万。 不过想要成为过百万的大牛&#xff0c;天时地利任何一个都不能少&#xff0c;大多数的产品经理暂时还在打怪升级攒经验。 虽然暂时体验不…

C++ STL map容器erase操作避坑

map容器的erase方法有三种重载形式&#xff1a; //1.删除迭代器所指向的元素 //返回值是指向下一个节点的迭代器 iterator erase(iterator it); //2.区间删除 iterator erase(iterator first, iterator last); //3.根据键值删除 //返回值为删除的元素个数 size_type erase(con…

企业全面管理解决方案:基于Java技术的ERP管理系统源码

功能模块与描述&#xff1a; ERP首页&#xff1a; 销售统计与采购统计&#xff1a;实时展示销售和采购金额的统计数据。折线图统计&#xff1a;通过图表直观展示销售和采购趋势。 采购管理&#xff1a; 采购订单管理&#xff1a;处理采购订单的搜索、新增、导出等。采购入库与退…

安防综合管理系统EasyCVR平台GA/T1400视图库:基于XML的消息体格式

GA/T 1400标准的应用范围广泛&#xff0c;涵盖了公安系统的视频图像信息应用系统&#xff0c;如警务综合平台、治安防控系统、交通管理系统等。在视频监控系统中&#xff0c;GA/T 1400公安视图库的对接是实现视频图像信息传输、处理和管理的重要环节。 以视频汇聚EasyCVR视频监…

即时设计工具对决:Figma、Sketch与XD的优劣比较

最近几年&#xff0c;UI 设计工具出现了许多后起之秀&#xff0c;其中有四款更具代表性的UI设计软件&#xff1a;Sketch、Adobe XD、Figma 和 即时设计&#xff0c;这四个设计软件都有自己的优势。如果合作对您的UI设计过程至关重要&#xff0c;那么Figma 和 即时设计 它应该是…

Flink SQL查询语法部分详解(提供需求、数据练习复现)

一、Hints 动态表选择&#xff1a;可以在查询表的时候动态修改表的参数配置 1、读取kafka的数据建表 CREATE TABLE students (id STRING,name STRING,age INT,sex STRING,clazz STRING ) WITH (connector kafka,topic students, -- 指定topicproperties.bootstrap.servers …

PyQt5创建与MySQL数据库集成的应用程序

最近&#xff0c;对之前的mysql管理系统进行了更新升级&#xff0c;制作了一版关于车牌的管理系统&#xff01; &#xff08;1&#xff09;实现了对车牌和用户基本信息的增删改查的功能 &#xff01; &#xff08;2&#xff09;加入了对数据库的刷新和状态显示功能 &#xff…

Windows下载安装RabbitMQ客户端(2024最新篇)

文章目录 RabbitMQ认知RabbitMQ下载RabbitMQ安装 更多相关内容可查看 RabbitMQ认知 定义&#xff1a;RabbitMQ是一个消息中间件&#xff0c;它接受并转发消息。你可以把它当做一个快递站点&#xff0c;当你要发送一个包裹时&#xff0c;你把你的包裹放到快递站&#xff0c;快递…

详解MyBatis(三)

目录 1.#{} 和 ${} 1.1#{} 和${} 使用 Integer类型参数 String类型参数 1.2#{} 和 ${}区别 1.2.1#{}性能更高&#xff08;预编译&#xff09; 1.2.2#{}更安全&#xff08;防止SQL注入&#xff09; 1.3排序功能 1.4like查询 2.数据库连接池 2.1连接池介绍 2.2更换连接池…

http接口上传文件响应413:413 Request Entity Too Large

目录 一、场景简介二、异常展示三、原因四、解决 一、场景简介 1、服务端有经过nginx代理 2、上传文件超过5M时&#xff0c;响应码为413 3、上传文件小于5M时&#xff0c;上传正常 二、异常展示 三、原因 nginx限制了上传数据的大小 四、解决 扩大nginx上传数据的大小 步…

44-5 waf绕过 - SQL注入绕WAF方法

环境准备: 43-5 waf绕过 - 安全狗简介及安装-CSDN博客然后安装sqlilabs靶场:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、双写绕过 打开sql靶场的第一关:http://127.0.0.1/sqli-labs-master/Less-1/?id=1 验证一下waf是否开启防…

Win10下CodeBlock实现socket TCP server/client

文章目录 1 安装codeblock2 适配libws2_32.a库3 TCP socket工作原理4 代码实现服务端客户端5 运行效果1 安装codeblock 官方免费下载 值得一提的是,安装时,指定安装路径,其他默认安装即可 2 适配libws2_32.a库 默认安装,只有3个库,如果编译socket,需要专门的库libws2…

阿奇科技 简单java-swing计算器源码(可用于课设等)

此系统用的技术有java swing&#xff01; 实现的功能&#xff1a; 加减乘除&#xff08;可以进行小数运算&#xff09; 清空数据 最小化 小巧方便&#xff0c;功能齐全&#xff01; 页面截图: 源码地址&#xff1a;点击这里下载源码 获取全套代码&#xff0c;或咨询更多代码…

自动装车系统车辆定位-激光雷达解决方案

在自动装车系统中&#xff0c;激光雷达为车辆定位提供了一种高效且精确的解决方案。以下是关于这一解决方案的详细分析&#xff1a; 一、解决方案概述 激光雷达解决方案在自动装车系统中&#xff0c;通过发射激光束并接收目标反射回来的信号&#xff0c;来探测车辆的位置、状…

K8s(Kubernetes)常用命令

大家好&#xff0c;当谈及容器编排工具时&#xff0c;Kubernetes&#xff08;常简称为K8s&#xff09;无疑是当今最受欢迎和广泛使用的解决方案之一。作为一个开源的容器编排平台&#xff0c;Kubernetes 提供了丰富的功能&#xff0c;可以帮助开发人员和运维团队管理、部署和扩…