Mysql之存储过程与函数

news2024/11/19 13:37:40

Mysql之存储过程与函数

  • 存储过程概述
    • 分类
    • 创建存储过程
      • 一般的语法格式
      • 完整的语法格式
      • 案例一
      • 案例二
    • 调用存储过程
      • 调用语法格式
    • 创建存储函数
    • 存储过程与函数的查看,修改和删除

存储过程概述

官网解释是:存储过程的英文是 Stored Procedure 。它的思想很简单,就是一组经过 预先编译 的 SQL 语句的封装。
执行的过程:
存储过程预先存储在 MySQL 服务器上,需要执行的时候,客户端只需要向服务器端发出调用
存储过程的命令,服务器端就可以把预先存储好的这一系列 SQL 语句全部执行

好处:
1.简化操作,提高了sql语句的重用性,减少了开发程序员的压力
2.减少操作过程中的失误,提高效率
3.减少网络传输量(客户端不需要把所有的 SQL 语句通过网络发给服务器) 4、减少了 SQL 语句暴露在网上的风险,也提高了数据查询的安全性

注意:存储过程一旦被创建出来,我们直接调用存储过程名就行 (类似函数的调用)

不过需要注意的是:存储过程是没有返回值的

分类

存储过程根据有无参数和有无返回值进行分类
1.没有参数(无参数无返回)
2.仅仅带 IN 类型(有参数无返回)
3.仅仅带 OUT 类型(无参数有返回)
4.既带 IN 又带 OUT(有参数有返回)
5.带 INOUT(有参数有返回)

关键字为IN, OUT,INOUT, 可以多个存在,多个存在用 | 连接

IN: 输入参数,代表着入参
OUT:输出参数,代表着出参
INOUT:既是输入参数,又是输出参数

创建存储过程

一般的语法格式

语法格式:

CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,...)
BEGIN 
	#存储的Mysql语句
END

语法格式类似于C语言中的函数
如果只有一条Mysql语句,可以省略BEGIN 和END,如果有多条Mysql语句,那么就不能省略

因为MySQL默认的语句结束符号为分号‘;’。为了避免与存储过程中SQL语句结束符相冲突,需要使用DELIMITER改变存储过程的结束符

一般使用 $或者 // 来作为语句结束的符号

完整的语法格式

DELIMITER $
CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,...)
[characteristics ...]
BEGIN
sql语句1;
sql语句2;
END $
DELIMITER;  #注意:这个步骤不要忘记

案例一

创建存储过程select2_all_data(),查看 jobs 表的所有数据

DELIMITER $
CREATE PROCEDURE select2_all_data()
BEGIN
SELECT * FROM jobs;
END $
DELIMITER;

#CALL 用CALL调用
CALL select2_all_data();

在这里插入图片描述

案例二

在这里插入图片描述

这里注意:使用OUT输出结果的时候,在Mysql语句中药结合INTO 一起使用作为, INTO后面为变量名,存储结果

DELIMITER $ 
CREATE PROCEDURE show_data(IN empname varchar(20), OUT empsalary varchar(20))
BEGIN
	SELECT salary INTO empsalary FROM emp WHEREE last_name = empname
END $ 
DELIMITER;

#这里注意:使用set设置,  @ + 变量名
set @empname = 'ABEl';

#调用
show_data(@empname, @empsalary);

#选择
SELECT @emsalary;

调用存储过程

存储过程有多种调用方法。存储过程必须使用CALL语句调用,并且存储过程和数据库相关,如果要执行其他数据库中的存储过程,需要指定数据库名称,例如CALL dbname.procname

调用语法格式

IN参数模式

#IN参数 调用
CALL 存储过程名('值')

OUT参数模式

#OUT参数  调用
set @变量名
CALL 存储过程名(@变量量)
SELECT @变量名

INOUT参数模式

set @变量名  = '值'
CALL 存储过程名(@变量名)
SELECT @变量名

创建存储函数

语法格式

DELIMITER //
CREATE FUNCTION 变量名(参数)
[character 约束条件]
RETURN 返回值类型

BEGIN 
	函数体
END //
DELIMITER;

特别注意:
在这里插入图片描述

案例:创建存储函数,名称为email_by_name(),参数定义为空,该函数查询Abel的email,并返回,数据类型为字符串型

CREATE FUNCTION email_by_name()
RETURNS VARCHAR(25)
DETERMINISTIC
CONTAINS SQL
BEGIN
RETURN (SELECT email FROM employees WHERE last_name = 'Abel');
END //
DELIMITER ;


#调用
SELECT email_by_name();

调用,这里使用SELECT 关键字来调用存储函数

存储过程与函数的查看,修改和删除

查看信息
语法格式

#查看创建信息
SHOW CREATE FUNCTION 名字;
SHOW CREATE PROCEDURE 名字;

#查看状态信息  (可用LIKE 取别名)
SHOW FUNCTION STATUS 名字;
SHOW PROCEDURE STATUS 名字;

修改信息
使用关键字ALTER

#修改定义
ALTER PROCEDURE CountProc
MODIFIES SQL DATA
SQL SECURITY INVOKER ;

删除信息
使用关键字DROP

DROP FUNCTION IF  EXISTS 名字;
DROP PROCEDURE IF EXISTS 名字;

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

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

相关文章

Java项目:36 springboot图书个性化推荐系统的设计与实现003

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 springboot003图书个性化推荐系统的设计与实现 管理员:首页、个人中心、学生管理、图书分类管理、图书信息管理、图书预约管理、退换图书…

java014 - Java继承

1、继承 1.1 继承概述 继承是面向对象的三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。 1.2 继承格式 public class 子类类名 extends 父类类名 {} 范例:public class son extends …

如何在Matlab代码中使用C代码

一、为什么在Matlab中使用C 性能优化:C语言提供了接近硬件的编程能力,使得开发者可以编写高效率的代码。对于计算密集型任务,尤其是那些需要大量数值计算的场景,用C语言编写的函数通常比MATLAB内置函数运行得更快。这是因为C语言…

Vue基础入门(2)- Vue的生命周期、Vue的工程化开发和脚手架、Vue项目目录介绍和运行流程

Vue基础入门(2)- Vue的生命周期、Vue的工程化开发和脚手架、Vue项目目录介绍和运行流程 文章目录 Vue基础入门(2)- Vue的生命周期、Vue的工程化开发和脚手架、Vue项目目录介绍和运行流程5 生命周期5.1 Vue生命周期钩子5.2 在creat…

12:Logstash|Web日志实时分析

Logstash|Web日志实时分析 logstashlogstash工作结构安装Logstash编写logstash配置文件步骤一:codec类插件插件帮助手册Logstash input插件步骤一:file模块插件filter grok插件Web日志实时分析部署beats与filebeat步骤一:filter grok模块插件logstash 一个数据采集、加工处…

python 基础知识点(蓝桥杯python科目个人复习计划55)

今日复习内容:做题 例题1:体育健将 问题描述: 小蓝作为班级里的体育健将,他被安排在校运会时参加n个体育项目,第i个体育项目参赛需要耗时ai分钟,赛后休息需要bi分钟(这意味着当他参加完这场比…

如何使用程序调用通义千问

之前分享了,使用程序调用文心一言。但是很快文心一言就要收费了。阿里的提供了暂时免费版的基础模型,效果还算可以。所以再分享一下,如何使用程序来调用通义千问的模型。 整体很简单,分三步:导入依赖;获取A…

STL-map和set

目录 一、关联式容器 二、键值对 三、树形结构的关联式容器 3.1 set 3.1.1 set介绍 3.1.2 set的使用 1. set的模板参数列表 2. set的构造 3. set的迭代器(类型是双向迭代器) 4. set的容量 5.set修改操作 6、operator 7. set的使用举例 3.2 map 3.2.1map介绍 3.2.2map的…

QT 打开项目提示 no valid settings file could be found

QT 打开项目提示 no valid settings file could be found 解决方案: 删除对应项目中的.user 文件 在打开项目,而后点击“项目”,在Configure project 栏中选择合适的kits然后点击configure project按钮即可。

C++面试干货---带你梳理常考的面试题(二)

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 1.struct 和 class 区别 1.默认访问权限:struct中的成员默认为public,而class中的成员默认为priv…

绘图设计:用Draw.io绘制图形技巧大全(含统一建模语言UML模板)

一、常见UML模板 1.流程图 2.用例图 include是包含关系,extend是扩展关系 简而言之,include是子集指向父集;而extend是扩展用例指向基础用例(基础用例可以理解为系统核心功能,扩展用例是可选的,不是必须…

SpringBoot自定义注解+反射实现 excel 导入的数据组装及字段校验

在前段时间的开发工作中,接手了一个很简单,很普通的开发任务。 要求实现一个单表的基础数据的批量导入功能。 评估下来,用户每次批量导入的数据量也就几千条,也不大。 是不是很简单,没有骗你们吧。但是呢&#xff0…

OJ_子串计算

题干 c实现 #include <stdio.h> #include <string> #include <map>using namespace std;int main() {char strArr[100];while (scanf("%s", strArr) ! EOF) {string str strArr;map<string, int> subCount;for (int i 0; i < str.size…

【[STM32]标准库-自定义BootLoader】

[STM32]标准库-自定义BootLoader BootloaderBootloader的实现BOOTloader工程APP工程 Bootloader bootloader其实就是一段启动程序&#xff0c;它在芯片启动的时候最先被执行&#xff0c;可以用来做一些硬件的初始化或者用作固件热更新&#xff0c;当初始化完成之后跳转到对应的…

C++基础2:C++基本数据类型和控制结构

此专栏为移动机器人知识体系下的编程语言中的 C {\rm C} C从入门到深入的专栏&#xff0c;参考书籍&#xff1a;《深入浅出 C {\rm C} C》(马晓锐)和《从 C {\rm C} C到 C {\rm C} C精通面向对象编程》(曾凡锋等)。 2.C基本数据类型和控制结构 2.1 C基本数据类型 程序是由算法…

这回就好好聊聊Kotlin的泛型

公众号「稀有猿诉」 原文链接 这回就好好聊聊Kotlin的泛型 泛型(Generics)是静态强类型编程语言中非常强大的特性&#xff0c;可以极大的加强代码的复用&#xff0c;并增强类型安全&#xff0c;减少运行时的类型转换错误。在这篇文章就来详细的学习一下Kotlin中对泛型的…

080|为什么阿里的价值观值得你关注?

在阿里巴巴20周年年会现场&#xff0c;万众瞩目之下&#xff0c;马云和张勇完成了阿里巴巴董事长职务的交接。 不过你也知道&#xff0c;这次接棒在一年前就已经公布了&#xff0c;在年会上只是一个仪式。在20周年年会过后&#xff0c;我找到了互联网圈的资深媒体人阳淼&#…

Mathcad tips_table相关

1. 可以插入表格&#xff0c;或者2. 从excel 文件导入 选择列 选择其中一行的数值

408专业课130+|我的备考经验和复盘

408的四门课任务量多到爆炸&#xff01;但难度不止于此。别忘了大部分选计算机的勇士们&#xff0c;是要考数学的&#xff01;直接起飞。 408数学无疑是王炸王炸&#xff0c;要想上岸就一定要把这两个大头一起拿下&#xff01; 作为一个成功上岸的非计算机专业跨考生&#xf…

计算机网络实验一 网线制作

实验目的与要求&#xff1a; 实验目的 了解以太网网线&#xff08;双绞线&#xff09;和制作方法 实验内容 了解网线和水晶头 学习网线制作方法 实验环境和要求 网线 水晶头 压线钳 剥线钳 网线测试器 方法、步骤&#xff1a; 步骤一 准备工具和材料 步骤二 剥掉双绞线的外…