SQL编程---存储过程和存储函数

1.基本概念

  • 存储过程和函数是事先经过编译并存储在数据库中的一段 SQL 语句的集合。

2.存储过程和函数的好处

  1. 提高代码的复用性。
  2. 减少数据在数据库和应用服务器之间的传输,提高效率。
  3. 减少代码层面的业务处理。

3.创建和调用存储过程

<1>创建存储过程

创建存储过程-- 修改分隔符为$[不然默认到;结束,后面的执行不到]DELIMITER $-- 标准语法CREATE PROCEDURE 存储过程名称(参数列表)BEGINSQL 语句列表;END$-- 修改分隔符为分号[;前面有空格]DELIMITER ;

<2>调用存储过程

	调用存储过程CALL 存储过程名称(实际参数);

举例学生表使用存储过程查看信息
在这里插入图片描述
<1>创建stu_group()存储过程,封装 分组查询总成绩,并按照总成绩升序排序的功能

DELIMITER $$ -- 修改sql的结束符CREATE PROCEDURE stu_group();
BEGINSELECT gender ,SUM(score) getsum FROM student GROUP BY gender ORDER BY getsum ASC;
END $$DELIMITER ; -- 将SQL的结束符改回;

<2>调用stu_group()存储过程

CALL stu_group();

结果:
在这里插入图片描述
<3>查看/删除存储过程

-- 查看存储过程(语法)
SELECT * FROM mysql.proc WHERE db = '数据库名称';
-- 删除存储过程(语法)
DROP PROCEDURE [IF EXISTS] 存储过程名称;

4.存储函数

<1>概念
存储函数和存储过程理解上是一样的,只是存储函数有返回值,必须写return语句。
<2>很多存储函数mysql底层帮我们实现了
如:

-- 获取系统当前时间SELECT NOW();SELECT YEAR ('2021-8-4'); -- 年SELECT MONTH ('2021-8-4');-- 月SELECT DAY ('2021-8-4');-- 日SELECT CONCAT ('a','b','c') AS str ; -- 拼接字符串SELECT CHAR_LENGTH ('hello'); -- 字符串长度SELECT LENGTH (''hello) -- 占用字节大小-- 格式化日期SELECT DATE_FORMAT(NOW(),'%Y-%m-%d') AS birthday -- 格式化日期

格式化日期结果:
在这里插入图片描述

<3>自己创建存储函数

创建存储函数CREATE FUNCTION 函数名称([参数 数据类型])RETURNS 返回值类型BEGIN执行的sql语句;RETURN 结果;END$

需求–定义存储函数,获取学生表中成绩大于95分的学生数量

DELIMITER $CREATE FUNCTION fun_test1()
RETURNS INT
BEGIN-- 定义变量DECLARE s_count INT;-- 查询成绩大于95分的数量,为s_count赋值SELECT COUNT(*) INTO s_count FROM student WHERE score > 95;-- 返回统计结果RETURN s_count;
END$DELIMITER ;

调用删除函数:

--调用函数
SELECT fun_test1();
-- 删除函数
DROP FUNCTION fun_test1;

5.存储过程和函数的区别

  1. 返回值不同

    存储函数必须有一个且必须只有一个返回值,并且还要指定返回值的数值类型。存储过程可以有返回值,也可以没有返回值,甚至可以有多个返回值。

  2. 两者赋值的方式不同:

    存储函数可以采用select …into …方式和set值得方式进行赋值,只能用return返回结果集。存储过程可以使用select的方式进行返回结果集。

  3. 使用方法不同:

    函数可以直接用在sql语句当中,可以用来拓展标准的sql语句。存储过程,需要使用call进行单独调用,不可以嵌入sql语句当中。

  4. 函数中函数体的限制较多:

    不能使用显式或隐式方式打开transaction、commit、rollback、set autocommit=0等。但是存储过程可以使用几乎所有的sql语句。

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

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

相关文章

jvm 启动参数设置

-Xms256m -Xmx256m -XX:MaxPermSize64m 如果 jvm 启动失败&#xff0c; 说堆内存不够&#xff0c; 需要调小 初始堆和最大堆大小&#xff0c; 持久代大小&#xff1b; 第一行的参数是调节后的vm参数荔枝 &#xff1b;

类、变量、块、构造器、继承初始化顺序,终极解答

转载自 类、变量、块、构造器、继承初始化顺序&#xff0c;终极解答最近发现微信群里面有些群友在讨论类的初始化顺序&#xff0c;如类的静态变量、成员变量、静态代码块、非静态代码块、构造器&#xff0c;及继承父类时&#xff0c;它们的初始化顺序都是怎样的&#xff0c;下面…

数据表触发器

1.概念 触发器就是在表数据发生变化的时候&#xff0c;自动触发的一些 SQL 操作,查询不影响表中的数据&#xff0c;所以没有触发器。类似于web监听器机制,监听对应表的增删改。 2.触发器分类 触发器类型OLD 触发器之前的效果NEW 触发器之后的效果INSERT 类型的触发器无&…

Linux NAT网络连接权威指南

【1】准备工作&#xff0c;写在前面 1.1&#xff09;检查服务&#xff08;cmd>>services.msc,我用的是VM&#xff09; 1.2&#xff09;确保Vmnet8 连接处于启动状态 获取ipv4&#xff08;ipv6&#xff09;地址 &#xff08;在网络连接不正确时&#xff0c;作参考之用&a…

事务的概述

1.基本概念 将一条或者多条SQL看成一个整体&#xff0c;要么同时执行成功要么同时执行失败&#xff0c;这就是事务。 事务举例&#xff1a; 张三给李四转账500元钱&#xff0c;需要让三账户的余额-500&#xff0c;李四的账户余额500&#xff0c;转账是一个连续的过程&#xf…

Spring Boot Debug调试

转载自 Spring Boot Debug调试 在使用maven插件执行spring-boot:run进行启动的时候&#xff0c;如果设置的断点进不去&#xff0c;要进行以下的设置。 1、添加jvm参数配置 在spring-boot的maven插件加上jvmArguments配置。 <project>...<build>...<plugins>…

centos磁盘安装与磁盘分区方案详解

转自&#xff1a; https://yq.aliyun.com/ziliao/56538 前几天自己研究了下几个linux系统&#xff0c;还是觉着centos要好一些。相对稳定点&#xff0c;起码桌面系统还是比 ubuntu 强安装centos并不难&#xff0c;安装方法多得是&#xff0c;像硬盘安装&#xff0c;U盘安装&…

存储过程内基础语法

学生表 1.定义变量及变量赋值方式 DELIMITER ; 分号前面必须要有一个空格 <1>DECLARE 变量名 数据类型 [DEFAULT 默认值]; 需求-- 定义一个int类型变量&#xff0c;并赋默认值为10 DELIMITER $$ CREATE PROCEDURE pro_test1() -- 没有; BEGIN-- 定义变量DECLARE nu…

nginx-配置基于ip或域名的虚拟主机

【0】README&#xff1a; nginx 可以配置多种类型的虚拟主机&#xff1a; 类型1&#xff09; 基于ip的虚拟主机&#xff1b; 类型2&#xff09;基于域名的虚拟主机&#xff1b; 类型3&#xff09;基于端口的虚拟主机&#xff1b; 【1】配置基于 ip 的虚拟主机的准备工作 …

Tomcat集群session复制与Oracle的坑

转载自 Tomcat集群session复制与Oracle的坑 问题描述 公司某个系统使用了tomcat自带的集群session复制功能&#xff0c;然后后报了一个oracle驱动包里面的连接不能被序列化的异常。 01-Nov-2017 16:45:26.653 SEVERE [https-jsse-nio-8443-exec-2] org.apache.catalina.ha.ses…

存储过程内基础语法---补充while循环

1.基础语法 while循环初始化语句;WHILE 条件判断语句 DO循环体语句;条件控制语句;END WHILE;2.举例 计算1~100之间的偶数和 【注&#xff1a;num只能numnum1 不能num,num1; 】 <1>存储过程内部查询 DELIMITER $CREATE PROCEDURE pro_test6() BEGIN-- 定义求和变量DE…

nginx停止,平滑重启命令

TERM, INT 快速关闭&#xff1b; QUIT 从容关闭&#xff1b; HUP 平滑重启&#xff0c;重新加载配置文件&#xff1b; USR1 重新打开日志文件&#xff0c;在切割日志时用途较大&#xff1b; USR2 平滑升级可执行程序&#xff1b; WINCH 从容关闭工作进程&#xff1b; 【荔…

IntelliJ IDEA Community(社区版)下载及安装自用版

IntelliJ IDEA Community&#xff08;社区版&#xff09;下载及安装自用版 估计是个开发都逃脱不了用IDEA的命运吧&#xff0c;这么好的软件&#xff0c;白嫖了好多年。感恩。 现在很多公司已经不让用商业版的破解版了&#xff0c;所以这里讲的是社区版。 区别&#xff1a; 商…

视图的概述

1.概念和特点 <1>概念&#xff1a;视图&#xff08;view&#xff09;是一种虚拟存在的表&#xff0c;本身并不包含数据。它是作为一个select语法查询到的结果集&#xff0c;以此为基表创建的一张虚拟表。对视图的操作对基表有直接影响,[视图中的数据发送了改变&#xff…

Tengine-Ngnix高级版

转载自 Tengine&#xff0d;Ngnix高级版 Tengine介绍 Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上&#xff0c;针对大访问量网站的需求&#xff0c;添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网&#xff0c;天猫商城等得到了很好的…

nginx的日志文件配置

1&#xff09;与nginx日志相关的指令有两条&#xff1a;log_format 和 access_log&#xff1b;log_format 设置日志格式&#xff1b;access_log 指定日志文件存放路径&#xff1b;2&#xff09;log_foramt2.1&#xff09;指令参数&#xff1a;log_format combined $remote_addr…

存储引擎和数据库锁

一.存储引擎 1.MySQL体系结构 数据库存储引擎是数据库最核心的部分&#xff0c;不同的存储引擎提供不同的存储机制、索引技巧等。也就是说不同的存储引擎底层对数据的组织方式不一样&#xff0c;从而导致性能和特点也不一样。 2.MySQL 当中常用的存储引擎&#xff1a; Inno…

因修改/etc/sudoers权限导致sudo和su不能使用的解决方法

【1】问题描述 [pacosonlocalhost ~]$ sudo sudo&#xff1a;/etc/sudoers 属于组 ID 180301&#xff0c;应为 0 sudo&#xff1a;没有找到有效的 sudoers 资源&#xff0c;退出 sudo&#xff1a;无法初始化策略插件【2】解决方法 遇见这种问题应该检查sudo文件拥有者名称 ---x…

一张图搞清楚Java异常机制

转载自 一张图搞清楚Java异常机制 下面是Java异常类的组织结构&#xff0c;红色区域的异常类表示是程序需要显示捕捉或者抛出的。 Throwable Throwable是Java异常的顶级类&#xff0c;所有的异常都继承于这个类。 Error&#xff0c;Exception是异常类的两个大分类。 Error Erro…

索引---B+Tree

1.索引的介绍 MySQL 索引&#xff1a;是帮助 MySQL 高效获取数据的一种数据结构。所以&#xff0c;索引的本质就是数据结构&#xff01;在表数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式指向数据&#xff0c; 这样就…