当前位置: 首页 > news >正文

MySQL----存储过程和存储函数

一、概述

存储过程就是数据库层面的代码封装和复用,可以接收参数,也可以返回参数,大大减少了网络交互。而存储函数类似于存储过程的一种特殊情况,一般不使用存储函数,因为可以使用存储函数的情况可以使用存储过程,但是能使用存储过程的情况却不一定能使用存储函数。

二、语法

1.存储过程

创建一个存储过程:

create procedure name(参数列表)
beginSQL语句;
end;

参数列表为(参数类型 参数名 数据类型)类型有 [IN/OUT/INOUT],其中IN表示输入类型,可以是一个常量,只能读取,在不写类型时的默认值。而OUT则必须是变量,不管传入的值是什么,都是默认为NULL。INOUT则是既可以当IN又可以当OUT。

下面是一个例子:

先创建应该class表:

create table class(id int primary key auto_increment,
name varchar(20),
teacher varchar(20));

然后创建一个存储过程,根据传来的参数来增加数据:

create procedure p2(IN className varchar(20),IN teacher varchar(20))
begininsert into class (name, teacher) values (className,teacher);
end;

之后执行即可:

call p2('计算机组成原理','James');

其实存储过程中不仅仅可以执行SQL语句,也可以执行其他逻辑。

这里介绍一些逻辑:

if判断:

if.....then.....

elseif ....then....

else....

end if;

这个和Java或者C++中的if很像,只不过要注意elseif是连在一起的。

case判断:

case 表达式

when value1 

then.....

when value2

then....

else

......

End case;

循环逻辑:

while  条件 do

SQL逻辑

End while

repeat

SQL逻辑

until 条件

End Repeat;这个和while循环不同的是只有满足条件时才会停止。

[begin_lable: ] loop

SQL逻辑;

End loop[end_lable] 

这个循环理论上会一种循环,需要搭配一下语句来使用:

leave lable:退出指定的循环。

iterate lable:相当于Continue。

同时也需要了解一下变量

1.系统变量

系统变量一般不涉及创建,大多用来查询:show global variables (like '模糊查询')

2.会话变量

session变量,只在当前会话生效,设置:set session 变量名 = [0/1]

查询: show session variables (like '模糊查询')

3.局部变量

作用范围为begin 到end的代码块中,声明:declare 变量名 类型 [default 默认值] ,赋值:set 变量名 := 值 ;或者 select count(*) into 变量名 from 表名;

4.用户自定义变量

使用时直接使用“@+变量名” 即可,不用事先声明,初始值为null,作用范围为当前会话。

下面是一个例子:

create procedure p1(IN num int)
begindeclare Total int default 0;declare count int default num;while count>0 doset Total := Total + count;set count := count - 1;End while ;select Total As Result;
end;
call p1(100);

执行输出 5050

2.存储函数

就是有返回值,而且参数只能是IN类型的存储过程。

语法:

create function 函数名(参数名 参数类型)
returns 返回值类型 特征值(Deterministic:幂等性,NoSQL:不包含SQL语句,ReadsSQLdata:只包含读取数据的SQL语句)
begin--SQL语句Return 返回值;
End;

使用时:select 函数名(参数);

下面是一个例子:


create function IsAult (age int)
returns varchar(20) Deterministic
begindeclare Result varchar(20);if age >= 18then set Result := '成年了';
elseset Result := '还没有';end if;
return Result;
end;select IsAult(11);

http://www.dtcms.com/a/479565.html

相关文章:

  • python - 第三天
  • 可信赖的网站建设案例wordpress垂直分页导航插件
  • led外贸网站制作建设网站中期要做什么
  • H3C NQA+track 实现 双链路主备切换
  • 域名网站排名如何免费自做企业网站
  • 深圳龙岗做网站wordpress 用户 权限
  • 做毕业设计免费网站建设游民星空是谁做的网站
  • 合肥高端网站建设设计公司哪家好下载手机商城app下载安装
  • 35岁,挺好,慢慢来,比较快
  • Python爬虫实战:获取同花顺技术选股数据并做分析
  • 四平做网站佳业网络wordpress电商平台搭建
  • 10、Python流程控制-条件判断
  • 广州祥云平台网站建设如何建一个微信公众号
  • 详解AVL树旋转操作实现
  • 宁波网站推广外包服务湖南网络公司网站建设
  • Appsflyer Web2App :两种方式全解析
  • Linux之环境变量
  • 爱站网挖掘关键词厚昌营销网站建设
  • 大型国有企业网站建设wordpress固定链接显示404
  • 料神wordpress建站教程windows优化大师是什么
  • CCF-GESP 等级考试 2025年9月认证C++二级真题解析
  • 广州公司网站长春新增2个高风险地区
  • wordpress建手机网站吗wordpress 花瓣网
  • 2025深圳国际全触与显示展影响力如何?本次会展有那些亮点?
  • 网站开发有哪些软件有哪些wordpress 获取文章的标签
  • 怎么在网站中做视频背景杭州建网站企业
  • 软考中级软件设计师备考指南(一):计算机系统基础与数据表示
  • 陕西建设执业注册中心网站天津东丽做网站
  • 怎么做下载类的网站吗未注册网站
  • IDEA和GIT实现cherry pick拣选部分变更到新分支