别再说不知道什么是存储过程和存储函数了

简介: 今天项目需要写个存储过程,长时间没有写存储过程有点生疏和忘记了,所以想着写一篇文章来总结下存储过程的一些相关知识,算是复习一下加深记忆。

前言


今天项目需要写个存储过程,长时间没有写存储过程有点生疏和忘记了,所以想着写一篇文章来总结下存储过程的一些相关知识,算是复习一下加深记忆。


一、基本概念


这里有两个概念:存储过程和存储函数。


存储过程和存储函数是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程和函数可以简化应用开发人员的工作,减少数据在数据库和应用服务器之间的传输,能够提高数据库的处理效率。存储过程在高并发数据中使用的比较多。

存储过程和存储函数的区别在于存储函数是必须有返回值的,而存储过程并没有。存储过程的参数可以是in ,out ,inout类型,存储函数的参数类型只能是in。所以可以说存储函数是一个有返回值的存储过程,而存储过程是一个没有返回值的存储函数。


二、存储过程相关操作


1、创建、调用存储过程


创建存储过程的基本语法:


create procedure procedure_name([params,.....])
begin
    SQL语句
end;
复制代码


调用存储过程的语法如下


call procedure_name();
复制代码


实例:


首先创建一个employee表,并插入数据:


DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `lastName` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `departmentID` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- ----------------------------
INSERT INTO `employee` VALUES ('1', '亚索', '123qq.com', '201');
INSERT INTO `employee` VALUES ('2', '李青', '12345@qq.com', '201');
INSERT INTO `employee` VALUES ('3', '艾欧尼亚', '774855@qq.com', '203');
INSERT INTO `employee` VALUES ('4', '德玛西亚', '6565@qq.com', '203'
复制代码


employee表结果如下:


7d27d5ec7cf5490aa81cbb97521b9bc4~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


创建一个存储过程:


create procedure demo1()
begin
   select * from employee
end$
复制代码


微信截图_20220518125719.png


调用刚刚创建的存储过程:


call demo1()$
复制代码


584059e3086746d29191e7035caf9a49~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


2、查看和删除存储过程


查看存储过程的基本语法


查询指定数据库的所有的存储过程
如果不指明type 则默认shi存储过程
select name from mysql.proc where db='数据库名字 and type = 'PROCEDURE'
复制代码


示例:


select name from mysql.proc where db='jdbc'$
复制代码


e6196c1a433f41a8bfaf04f78695f7f3~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


查看指定存储过程的定义:


show create procedure [数据库名].存储过程名 \G$
复制代码


1aa35a1e02904346a6563bf5548212d8~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


查看存储过程的状态:


show procedure status \G$
复制代码


b1f4455746144341b55df24cdcfee0ab~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


删除存储过程:


drop procedure 存储过程名称$
复制代码


76f7962b1c6a4fd78f5f060092099d5b~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


三、存储函数相关操作


存储函数的基本语法与存储过程基本相似:


create function function_name([params type,.....])
returns type
begin
   .....
end;
复制代码


实例,定义一个存储过程,返回刚刚创建的employee表中departmentID为203的数据有几条


create function numofemployee(department_ID int)
returns int
begin 
  declare count int;
  select count(*) into count from employee where departmentID=department_ID ;
  return count;
 end$
复制代码


调用存储函数与存储过程有点不一样:


select function_name(params)$
复制代码


03dbc175342a4795bb8f965a682e077c~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


查看存储函数的基本语法,查询指定数据库的所有的存储函数:


select name from mysql.proc where db = '数据库名字' and type= 'FUNCTION'
复制代码


ff240b86776d44218b5d07fef1738262~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


查看存储过程的状态:


show function status \G$
复制代码


5e8eccd277fa4115af4031500ee179a0~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


删除存储函数基本语法:


drop function fun_name$
复制代码


c3aa48784ffd48dca68b8946f2b5821b~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


总结


这篇文章就是介绍一下关于存储过程和存储函数的一些基本概念和相关的操作,下一篇文章将会着重介绍下存储过程的一些相关语法和使用。

目录
相关文章
|
8月前
|
存储 SQL NoSQL
mysql存储过程和存储函数
mysql存储过程和存储函数
|
7月前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(2)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
7月前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(1)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
6月前
|
存储 SQL 数据库
MySQL设计规约问题之为什么要避免使用存储过程、触发器和函数
MySQL设计规约问题之为什么要避免使用存储过程、触发器和函数
|
7月前
|
存储 SQL 关系型数据库
MySQL存储过程和存储函数的使用
MySQL的存储过程和存储函数在功能和用法上有明显的区别。存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,通过指定名称和参数(如果有)来调用执行,可以返回多个值或结果集,但不直接返回值。而存储函数则是一个有返回值的特殊存储过程,它返回一个值或表对象,可以直接嵌入SQL语句中使用,如SELECT语句中。两者都是为了提高SQL代码的重用性和性能,但使用场景和方式有所不同。
4334 4
|
7月前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(3)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
7月前
|
存储
Cloudstack启动实例模板从二级存储复制到主存储过程
Cloudstack启动实例模板从二级存储复制到主存储过程
|
7月前
|
存储 关系型数据库 MySQL
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(4)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
2月前
|
存储 SQL NoSQL
|
3月前
|
存储 SQL 关系型数据库
MySql数据库---存储过程
MySql数据库---存储过程
60 5