过程:封装了若干条语句,调用时,这些封装体执行

函数:是一个由返回值的’过程‘

过程是没有返回值的函数

我们把若干条sql封装起来,起个名字---过程

把此过程存储在数据库中------存储过程

存储过程的创建语法:

create procedure procedureName()

begin

-----sql语句;

end$

我们创建一个简单的存储过程:

create procedure p1()
begin
select 2+3
end$

调用存储过程:

call p1()$

存储过程是可以编程的,意味着可以使用变量,表达式,控制结构来完成复杂的功能

在存储过程中,用declare声明变量

格式:declare 变量名 变量类型[default 默认值]

create procedure p2()
begin
declare age int default 18;
declare height int default 180;
select concat('年龄是',age,'身高是',height);
end$

我们调用这个p2存储过程看看:

存储过程中,变量可以进行sql语句中的合法运算,如+-*/

注意的是,运算的结果如何赋值给变量:

set 变量名 := expression

create procedure p3()
begin
declare age int default 18;
set age :=age+20;
select concat('20年后年龄是',age);
end$

if/else 控制:

create procedure p4()
begin
declare age int default 18;
if age>=18 then
select '已成年';
else
select '未成年';
end if;
end$

可以看到我们的存储过程没有传参数,接下来我们就建立一个可以传参的存储过程:

传参的语法  [in/out/inout] 参数名 参数类型

create procedure p5(width int, height int)
begin
select concat('你的面积是',width*height)as area;
if width>height then
select '你挺胖';
elseif width<height then
select '你挺瘦';
else
select '你挺方';
end if;
end$

我们给里面传入参数(3,4):

我们都知道控制结构有三大类:顺序,选择和循环

我们现在来写一个带有循环控制结构的存储过程:

create procedure p6()
begin
declare total int default 0;
declare num int default 0;
while num<100 do
set num:=num+1;
set total:=total+num;
end while;
select total;
end$

上面的是我们输出1到100的和,接下来我们在p6的基础上稍作改进写一个p7:输入一个参数N,得到1到N的和:

create procedure p7(in N int)
begin
declare total int default 0;
declare num int default 0;
while num<N do
set num:=num+1;
set total:=total+num;
end while;
select total;
end$

in 表示我们是输入参数

我们接下来看输出参数:

create procedure p8(in n int,out total int)
begin
declare num int default 0;
set total:=0;
while num<n do
set num:=num+1;
set total:=total+num;
end while;
end$

其实out就是往外面输出参数,我们给个变量来接受它。

我们在看一下inout型参数:

create procedure p9(inout age int)
begin
set age:=age+20;
end$

在这里我们要先声明一个变量,然后调用存储过程,然后再输出它

MySQL存储过程01的更多相关文章

  1. MySQL 存储过程

    MySQL 存储过程 存储过程是通过给定的语法格式编写自定义的数据库API,类似于给数据库编写可执行函数. 简介 存储过程是一组为了完成特定功能的SQL语句集合,是经过编译后存储在数据库中. 存储过程 ...

  2. Mysql存储过程查询结果赋值到变量的方法

    Mysql存储过程查询结果赋值到变量的方法   把查询结果赋值到变量,大部分情况下使用游标来完成,但是如果明确知道查询结果只有一行(例如统计记录的数量,某个字段求和等),其实可以使用set或into的 ...

  3. mysql存储过程之异常处理篇

    mysql存储过程也提供了对异常处理的功能:通过定义HANDLER来完成异常声明的实现 语法如下: DECLARE handler_type HANDLER FOR condition_value[, ...

  4. Mysql存储过程知识,案例--mysql存储过程基本函数

    Mysql存储过程知识,案例: create procedure delete_setting(in p_settingid integer) begin delete from setting wh ...

  5. MySQL存储过程学习笔记

    MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣.MySQL 5.0终于开始支持存储过程了. MySQL的关键字大小写通用.该学习笔记对关键字使用大写:变量名,表名使用小写. ...

  6. MySQL存储过程带in和out参数

    MySQL存储过程带in和out参数 最简单的例子: [html] mysql> DELIMITER $$ mysql> USE test $$ Database changed mysq ...

  7. MYSQL存储过程和函数学习笔记

    学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆课程笔记的综合. 1. 什么是存储过程和函数 将SQL语句放入一个集合里,然后直接调用存储过程和函数来执行已经定义好的SQL语句,通过存储过程和 ...

  8. mysql 存储过程的应用

    MySQL存储过程的创建   (1). 格式 MySQL存储过程创建的格式:CREATE PROCEDURE 过程名 ([过程參数[,...]]) [特性 ...] 过程体 这里先举个样例: mysq ...

  9. MySql存储过程的使用

    MySql存储过程跟sql server 有一定的区别,使用说明和步骤如下 使用说明 创建存储过程 MySQL中,创建存储过程的基本形式如下: CREATE PROCEDURE sp_name ([p ...

随机推荐

  1. IfcMaterial

    IfcMaterial is a homogeneous or inhomogeneous substance that can be used to form elements (physical ...

  2. SDN实验---OVS了解(转载)

    转载自:https://opengers.github.io/openstack/openstack-base-use-openvswitch/ 一:Open vSwitch介绍 (一)介绍 在过去, ...

  3. shell中函数的使用

    函数是一个脚本代码块,你可以对它进行自定义命名,并且可以在脚本中任意位置使用这个函数.如果想要这个函数,只要调用这个函数的名称就可以了.使用函数的好处在于模块化以及代码可读性强. (1).函数的创建语 ...

  4. 基于term vector深入探查数据

    1.term vector介绍 获取document中的某个field内的各个term的统计信息 term information: term frequency in the field, term ...

  5. c# 导出excel的三种方式

    第一种:流导出 SaveFileDialog exe = new SaveFileDialog(); exe.Filter = "Execl files (*.xls)|*.xls" ...

  6. CSS布局:sticky定位

    stick定位一如其名:它随“正常”文档流而动,直到规定位置,尔后“粘”在那里:或者,当它发现自己可以跟随“正常”文档流而脱离sticky位置时,就果断离开从而加入文档流. 代码与效果如下: < ...

  7. springboot:自定义缓存注解,实现生存时间需求

    需求背景:在使用springbot cache时,发现@cacheabe不能设置缓存时间,导致生成的缓存始终在redis中. 环境:springboot 2.1.5 + redis 解决办法:利用AO ...

  8. [Tool] Give some magic ! 那些奇思妙想的 Chrome 插件

    [ Reggy ] - 网站注册类自动填充临时信息,Magic! 但是对于非常规的网站无效.是什么意思呢? 就是说,它不是常规的 form 表单,而是使用 Js 操作数据,所以任何插件都无法自动识别. ...

  9. Java中常量以及常量池

    1.举例说明 变量 常量 字面量 int a=10; float b=1.234f; String c="abc"; final long d=10L; a,b,c为变量,d为常量 ...

  10. JDK动态代理为什么必须针对接口

    查看jdk的动态代理源码发现: 动态代理实际上是程序在运行中,根据被代理的接口来动态生成代理类的class文件,并加载class文件运行的过程,通过反编译被生成的$Proxy0.class文件发现: ...