MySQL 存储过程和函数

目录

一、存储过程和函数概述

二、创建存储过程和函数

1、创建存储过程

2、创建存储函数

三、查看/调用储存过程和函数

1、查看储存过程/函数

2、调用储存过程/函数

四、修改/删除存储过程和函数

1、修改存储过程和函数

2、删除存储过程和函数

五、练习 


一、存储过程和函数概述

存储过程就是一条或多条SQL语句的集合,可视为批文件,但是七作用不仅限于批处理。创建存储过程和函数的语句分别是create proceddure 和 create function。使用CALL语句来调用存储过程,只能输出变量返回值。函数可以从语句外调用(即通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。

二、创建存储过程和函数

1、创建存储过程

语法

create procedure 存储过程名称 ([定义存储过程参数列表]) 
begin
body
end 结束符

储存过程参数列表:

[in | out | inout]  参数名 参数类型

in---输入参数

out---输出参数

inout---输入输出参数

例如

mysql> delimiter //
mysql> create procedure avg_age()-> begin-> select avg(age) as ave_age-> from emp3;-> end //
Query OK, 0 rows affected (0.00 sec)mysql> delimiter ;

delimiter //语句的作用是将MySQL的结束符设置为//。MySQL默认的结束符是“;” 。避免冲突。

2、创建存储函数

语法

create function 存储函数名 ([定义存储过程参数列表])
returns 类型
begin
body;
end 结束符

例如

mysql> delimiter //
mysql> create function count_num()-> returns int-> return (select count(*) from emp3);-> //
Query OK, 0 rows affected (0.03 sec)mysql> delimiter ;

三、查看/调用储存过程和函数

1、查看储存过程/函数

基本语法1

 show [procedure | function] status [like '存储过程名|函数名' \G

基本语法2

 show create [procedure | function] 存储过程名|函数名 \G

 基本语法3

select * from information_schema.Routines where ROUTINE_NAME='存储过程名 | 函数名' \G

例如

基本语法1

mysql> show procedure status like 'avg_age' \G
*************************** 1. row ***************************Db: mydb3Name: avg_ageType: PROCEDUREDefiner: root@localhostModified: 2023-08-22 16:22:41Created: 2023-08-22 16:22:41Security_type: DEFINERComment: 
character_set_client: utf8
collation_connection: utf8_general_ciDatabase Collation: latin1_swedish_ci
1 row in set (0.00 sec)

基本语法2

mysql> show create procedure avg_age \G
*************************** 1. row ***************************Procedure: avg_agesql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIONCreate Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `avg_age`()
begin
select avg(age) as ave_age
from emp3;
end
character_set_client: utf8
collation_connection: utf8_general_ciDatabase Collation: latin1_swedish_ci
1 row in set (0.00 sec)

基本语法3

mysql> select * from information_schema.Routines where ROUTINE_NAME='avg_age' \G
*************************** 1. row ***************************SPECIFIC_NAME: avg_ageROUTINE_CATALOG: defROUTINE_SCHEMA: mydb3ROUTINE_NAME: avg_ageROUTINE_TYPE: PROCEDUREDATA_TYPE: 
CHARACTER_MAXIMUM_LENGTH: NULLCHARACTER_OCTET_LENGTH: NULLNUMERIC_PRECISION: NULLNUMERIC_SCALE: NULLDATETIME_PRECISION: NULLCHARACTER_SET_NAME: NULLCOLLATION_NAME: NULLDTD_IDENTIFIER: NULLROUTINE_BODY: SQLROUTINE_DEFINITION: begin
select avg(age) as ave_age
from emp3;
endEXTERNAL_NAME: NULLEXTERNAL_LANGUAGE: NULLPARAMETER_STYLE: SQLIS_DETERMINISTIC: NOSQL_DATA_ACCESS: CONTAINS SQLSQL_PATH: NULLSECURITY_TYPE: DEFINERCREATED: 2023-08-22 16:22:41LAST_ALTERED: 2023-08-22 16:22:41SQL_MODE: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIONROUTINE_COMMENT: DEFINER: root@localhostCHARACTER_SET_CLIENT: utf8COLLATION_CONNECTION: utf8_general_ciDATABASE_COLLATION: latin1_swedish_ci
1 row in set (0.01 sec)

 2、调用储存过程/函数

基本语法

call 存储过程名 (参数);
select 函数名([参数]);

例如

mysql> call avg_age;
+---------+
| ave_age |
+---------+
| 43.9000 |
+---------+
1 row in set (0.00 sec)

四、修改/删除存储过程和函数

1、修改存储过程和函数

基本语法

alter procedure | function  存储过程名 | 函数名 [参数]

例如 

2、删除存储过程和函数

基本语法

drop [procedure | function] [if exists] 存储过程名|函数名

五、练习 

创建表sch并插入数据

字段名

数据类型

主键

外键

非空

唯一

自增

id

INT

name

VARCHAR(50)

glass

VARCHAR(50)

sch 表内容

id

name

glass

1

小明

Glass1

2

小军

Glass2

create table sch ( 
id int primary key, 
name varchar(50) not null, 
glass varchar(50) not null 
)charset=utf8;insert into sch values
(1,'小明','Glass1'),
(2,'小军','Glass2')
;mysql> select * from sch;
+----+--------+--------+
| id | name   | glass  |
+----+--------+--------+
|  1 | 小明   | Glass1 |
|  2 | 小军   | Glass2 |
+----+--------+--------+
2 rows in set (0.00 sec)

1、创建一个可以统计表格内记录条数的存储函数 ,函数名为count_sch();

mysql> delimiter $$
mysql> create function count_sch()-> returns int -> begin-> return (select count(id) from sch)-> ;-> end$$
mysql> delimiter ;mysql> select count_sch();
+-------------+
| count_sch() |
+-------------+
|           2 |
+-------------+
1 row in set (0.00 sec)

2、创建一个存储过程record,有1个参数,输入id,功能是输入id输出对应完整信息

mysql> delimiter $$
mysql> create procedure record (in id_1 int) 
begin select * from sch where id=id_1; 
end$$
Query OK, 0 rows affected (0.00 sec)mysql> delimiter ;
mysql> call record(1);
+----+---------+--------+
| id | name    | glass  |
+----+---------+--------+
|  1 | 小明    | glass1 |
+----+---------+--------+
1 row in set (0.00 sec)

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

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

相关文章

【FAQ】H.265视频无插件流媒体播放器EasyPlayer.js播放webrtc断流重连的异常修复

H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,可支持H.264与H.265编码格式,性能稳定、播放流畅,能支持WebSocket-FLV、HTTP-FLV,HLS(m3u8&#…

Python功能制作之简单的3D特效

需要导入的库: pygame: 这是一个游戏开发库,用于创建多媒体应用程序,提供了处理图形、声音和输入的功能。 from pygame.locals import *: 导入pygame库中的常量和函数,用于处理事件和输入。 OpenGL.GL: 这是OpenGL的Python绑定…

如何声明一个全局变量?有什么注意事项?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 声明全局变量⭐ 注意事项⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚…

聊聊智慧城市的发展

目录 1.智慧城市应该是什么样子 2.智慧城市的实现方案 3.智慧城市会给人们造成的影响 1.智慧城市应该是什么样子 智慧城市是一种基于信息和通信技术的先进城市管理模式,旨在提高城市的运行效率、居民生活质量和可持续发展。智慧城市整合了各种智能设备、传感器、…

Pywin32 Cookbook by Eric

Writing Prompt 现在你是一名专业的Python工程师,请你根据"Pywin32_Funtion"函数的功能,为其编写一个清晰的文档说明Functions win32gui.GetWindowDC(hwnd) 描述 win32gui.GetWindowDC()函数用于获取指定窗口的设备上下文(Devi…

go 连接操作MySQL

连接Mysql 访问此网站搜索MySQL第一个就是按照指引运行 go get -u github.com\go-sql-driver\mysql导入包建立连接 package mainimport ("database/sql""fmt""time"_ "github.com/go-sql-driver/mysql" )var db *sql.DBfunc initdb…

二叉树搜索

✅<1>主页&#xff1a;我的代码爱吃辣&#x1f4c3;<2>知识讲解&#xff1a;数据结构——二叉搜索树☂️<3>开发环境 &#xff1a;Visual Studio 2022&#x1f4ac;<4>前言&#xff1a;在之前的我们已经学过了普通二叉树&#xff0c;了解了基本的二叉树…

[Go版]算法通关村第十四关青铜——原来这就是堆

目录 堆的概念和特征父子关系&#xff1a;(i-1)/2 堆的构造过程自底向上堆化&#xff08;Bottom-up Heapify&#xff09;举例 自顶向下堆化&#xff08;Top-down Heapify&#xff09; 插入操作举例 删除操作举例 堆结构的价值口诀 堆的概念和特征 堆是一个很大的概念&#xff0…

redis初识

目录 前言&#xff1a; 核心全局命令 key过期实现方式 定时器实现方式 基于优先级队列/堆 redis特性 redis优点 redis单线程模型 redis单线程为什么效率这么高&#xff1f; 核心五种数据类型内部编码方式 前言&#xff1a; redis作为当前主流的内存数据库&#xff08…

Promise详解

目录 一、前言&#xff1a;为什么会出现Promise?二、Promise是什么?2.1 Promise的初体验 三、使用Promise的好处?3.1 指定回调函数的方式更加灵活3.2 可以解决回调地狱问题&#xff0c;支持链式调用 四、Promise实例对象的两个属性五、resolve函数以及reject函数六、Promise…

iOS开发Swift-基础部分

1.常量 let maxNum 10 //单个常量赋值 let maxNum 10&#xff0c; minNum 2 //多个常量赋值用逗号隔开2.变量 var x 0.0 //单个变量赋值 var x 0.0&#xff0c; y 0.1 //多个变量赋值用逗号隔开3.类型注解 系统可通过赋初始值进行自动推断。 var name&#…

ssm汽车养护管理系统源码和论文

ssm汽车养护管理系统038 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 开题报告内容&#xff1a;&#xff08;研究现状、目的意义&#xff1b;基本内容、研究方法、参考文献等。&#xff09; 研究现状 国外…

driver‘s license exam 4

driver‘s license exam 1_spencer_tseng的博客-CSDN博客 driver‘s license exam 2_spencer_tseng的博客-CSDN博客 driver‘s license exam 3_spencer_tseng的博客-CSDN博客 driver‘s license exam 4_spencer_tseng的博客-CSDN博客 car indicator light_spencer_tseng的博…

2023牛客暑期多校训练营10 C Multiplication(复杂度证明)

拿了个一血&#xff0c;队友说复杂度可能有问题&#xff0c;我就来证一证 做法就不说了&#xff0c;题解里有&#xff0c;贴个代码 def gcd(a,b):if (b0):return areturn gcd(b,a%b) nint(input()) kint(input()) ans0 for x in range(0,102):for y in range(0,102-x):xx10**x…

java八股文面试[数据结构]——ArrayList和LinkedList区别

ArrayList和LinkedList的异同 二者的线程都不安全&#xff0c;相对线程安全的Vector,执行效率高。此外&#xff0c;ArrayList时实现了基于动态数组的数据结构&#xff0c;LinkedList基于链表的数据结构&#xff0c;对于随机访问get和set&#xff0c;ArrayList觉得优于LinkedLis…

ubuntu上使用osg3.2+osgearth2.9

一、介绍 在ubuntu上使用osgearth加载三维数字地球&#xff0c;首先要有osg和osgearth的库&#xff0c;这些可以直接使用apt-get下载安装&#xff0c;但是版本有些老&#xff0c;如果需要新版本的就需要自己编译。 #查看现有版本 sudo apt-cache madison openscenegraph #安装…

C#实现简单TCP服务器和客户端网络编程

在C#中进行网络编程涉及许多类和命名空间&#xff0c;用于创建和管理网络连接、传输数据等。下面是一些主要涉及的类和命名空间&#xff1a; System.Net 命名空间&#xff1a;这个命名空间提供了大部分网络编程所需的类&#xff0c;包括&#xff1a; IPAddress&#xff1a;用于…

2023年高教社杯数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

第2篇:ESP32 helloword第一个程序示范点亮板载LED

1.选择ESP32开发板 2.寻找串口号&#xff0c;win10自动安装驱动 手动安装驱动参考&#xff1a; 百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固&#xff0c;支持教育网加速&#xff0c;支持手机端。注册使用百度网盘即可…

markdown样式覆盖的解决方案

背景 最近公司在搞的ai项目中遇到了一个场景&#xff0c;公司一个新的ai项目在最开始搭建项目的直接引用了reset.css&#xff0c;项目开发到一半需要引用react-markdown插件展示gpt返回的内容&#xff0c;但是渲染的时候发现例如h1、h2、li、ui标签等等的默认样式由于reset的原…