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

202 阅读3分钟

这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战

| 作者:江夏

| CSDN:blog.csdn.net/qq_41153943

| 掘金:juejin.cn/user/651387…

| 知乎:www.zhihu.com/people/1024…

| GitHub:github.com/JiangXia-10…

本文大概23205字,建议阅读9分钟

前言

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

一、基本概念

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

存储过程和存储函数是事先经过编译并存储在数据库中的一段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表结果如下:

图片

创建一个存储过程:

create procedure demo1()
begin
   select * from employee
end$

图片

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

call demo1()$

图片

2、查看和删除存储过程

查看存储过程的基本语法

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

示例:

select name from mysql.proc where db='jdbc'$

图片

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

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

图片

查看存储过程的状态:

show procedure status \G$

图片

删除存储过程:

drop procedure 存储过程名称$

图片

三、存储函数相关操作

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

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)$

图片

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

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

图片

查看存储过程的状态:

show function status \G$

图片

删除存储函数基本语法:

drop function fun_name$

图片

总结

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

点击查看往期内容回顾

数据库的触发器你了解多少

OAuth2 实现单点登录 SSO

面试题系列之String,Stringbuffer,StringBuilder的区别(源码分析)

关于数据库的视图,你了解多少