千家信息网

010—存储过程和函数

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,一.对待存储过程和函数的态度在实际项目中应该尽量少用存储过程和函数,理由如下:1.移植性差,在MySQL中的存储过程移植到sqlsever上就不一定可以用了。2.调试麻烦,在db中报一个错误和在应用层
千家信息网最后更新 2026年11月03日010—存储过程和函数

一.对待存储过程和函数的态度

在实际项目中应该尽量少用存储过程和函数,理由如下:

1.移植性差,在MySQL中的存储过程移植到sqlsever上就不一定可以用了。

2.调试麻烦,在db中报一个错误和在应用层报一个错误不是一个概念,那将是毁灭性打击,直接一个error:1045什么的更本毫无头绪。

3.扩展性不高。

所以在互联网时代大型项目应该尽量少使用(不使用)存储过程和函数!!!

二.创建存储过程

2.1什么是存储过程?

存储过程和存储函数都是一组sql语句的集合。这些语句集合被当做一个整体存入数据库中。

2.2创建存储过程的语法:

create procedure 存储过程名(参数列表)

sql语句

.示例1:

delimiter //

create procedure pro()reads sql databegin select * from stu;end

//

那么我们现在就有一个存储过程pro了,但是这个存储过程他是没有参数的,他只是执行一次查询操作。

我们现在来讲解一下这个存储过程的结构:

delimiter // 是将分号转化为// 因为在sql执行时当他遇到分号 ; 时他就讲停止所以我们必须将其转化为 //直到最后一行才会停止执行。

reads sql data 解释characteristic的状态在这里是只读模式,其他的模式还有:no sql 没有sql语句 , ins sql 不包含读和写的语句 , modifies sql data 包含写入数据的语句等等。

begin /***/ end 在存储过程中当有多条语句集合时我们必须使用begin和end。

// 结束整个存储过程

2.3使用存储过程

现在只是创建了一个存储过程,那么我们怎么来使用这个存储过程呢?

语法:call 存储过程名()

将上一个存储过程pro使用的例子:

call pro();

2.4创建一个带参数的存储过程

参数列表:存储过程的参数有三种类型:in,out,inout 分别表示传入参数和传出参数,和既传入也传出参数。

例子:首先我们来创建两张表:课程表是学生表的从表。

create table stu(

stu_id bigint primary key auto_increment,#学号

stu_name varchar(10) not null,#姓名

stu_major int not null,#专业号

stu_sex char,#性别

stu_in date,#入学日期

stu_birth date,#出生日期

foreign key (stu_major) references major(ma_id)#专业外键设置

);

create table major(

ma_id int primary key,

ma_name varchar(15),

ma_boss varchar(10)

);

insert into major values(1,"信管","张三");

insert into major values(2,"电子商务","李四");

insert into stu values(1,"小明",1,"男","2017-09-01","1998-12-23");

insert into stu values(2,"小高",1,"男","2017-09-01","1998-05-01");

insert into stu values(3,"小李",2,"男","2017-09-01","1999-04-01");

我们再来创建一个带有参数的存储过程找到学生的主修课的名字,代码如下:

delimiter //

create procedure pro1(in sname varchar(10),out ma varchar(10))

reads sql data

begin

select ma_name into ma from major where ma_id = (select stu_major from stu where stu_name=sname);

end

//

使用这个存储过程:代码如下:

set @ma="没查询之前";

call pro1("小李",@ma);

select @ma;

解释一下代码:首先使用set @ma 定义一个全局变量,然后在使用call 存储过程名 语法调用存储过程,同时全局变量ma的值也改变了。

三.创建一个存储函数

3.1存储过程和存储函数的不同。

1.在函数中必须要有return返回值

2.在存储过程中参数有in out inout三种,默认为in类型,但是在函数中只有一种in类型。

3.2创建一个函数

语法:create function 函数名()

    return 返回类型

         sql语句集合

示例2:

delimiter //

create function fun1(num int)

returns int

begin

return num+1000;

end

//

显然函数与存储过程的最大的区别就是在于return

3.3调用函数

使用语法不在使用关键字call,而是关键字select ,select 函数名

例子:

select fun1(100);

四.删除存储函数和存储过程

语法:drop procedure | function 存储过程名或者是函数名

例子:

drop procedure pro;

注意:此时的存储过程或者函数名称是不带括号的!!!

五.在存储过程和存储函数中使用游标

5.1为什么需要游标?

当我们在使用存储过程的时候可能用到多条数据,那么我们就需要用到游标来存放多条数据。

5.2使用游标的注意点

游标不能单独存在,必须在存储过程或者是存储函数中使用。

5.3使用游标

语法:

1.创建游标:declare 游标名 cursor for select语句

2.打开游标:open 游标名

3.使用游标:fetch 游标名 into 变量名

4.关闭光标:close 游标名

示例3:

delimiter //

create function fun3(id int)

returns intreads sql data

Begin

declare cur cursor for select stu_id from stu;

open cur;

fetch cur into id;

close cur;

return id;

End

//

使用

set @id=0;

select fun3(@id);

可以发现游标只是将第一个值给了变量。


存储 过程 函数 参数 游标 语句 语法 例子 变量 数据 类型 标名 代码 只是 多条 示例 专业 全局 关键 关键字 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司排名 科技赋能下的互联网金融 互联网中国科技 腾讯阿里互联网科技 科技类互联网 互联网公司 科技公司 互联网科技作文 互联网科技媒体 亿账通互联网科技 多迪互联网科技有限公司 恒生科技互联网指数分析 福州新华互联网科技学校 知乎 青海科技产业互联网发展 乌鲁木齐新华智原互联网科技学校 晋城互联网科技 国大互联网教育科技有限公司薪资 互联网企业科技类企业如何做账 抖集互联网科技技术咨询 吉林省码上互联网科技电话 上海互联网科技园景观 上海挚品互联网科技有限公司 广州为想互联网科技有限公司 科技创新与互联网经济 凡科互联网科技 四川狮子座互联网科技 新兴科技互联网创新大赛颁奖典礼 健康食品互联网创新科技园项目 互联网公司黑科技创始人 上海创道互联网络科技有限公司 广州全民伙伴互联网科技有限公司
0