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

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

过程是没有返回值的函数

我们把若干条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. 今天使用Jmeter时遇到的几个问题及解决方法

    JDBC Request :Cannot load JDBC driver class 'com.mysql.jdbc.Driver'解决办法 在Jmeter中run JDBC Request时,收到 ...

  2. Kafka高级设计和架构,一文深化理解

    主题: 1.kafka是写磁盘还是写内存? 2.kafka究竟是由 consumer 从 broker 那里拉数据,还是由 broker 将数据推到 consumer? 3.如何区分已消费(consu ...

  3. 测试面试题集锦----liunx与网络

    国庆完后就回深圳了,所以也要参加面试了,我大概收集了一些感觉可能会面试到的一些笔试题,给大家参考,答案不一定全对,分为liunx ,网络,mysql,编程题,我分别按分类补充,以后在继续补充 liun ...

  4. iOS - 在xib中UILabel文字如何换行

    在换行的位置按住Option + Enter键即可换行

  5. 小于K的两数之和

    给你一个整数数组 A 和一个整数 K,请在该数组中找出两个元素,使它们的和小于 K但尽可能地接近 K,返回这两个元素的和. 如不存在这样的两个元素,请返回 -1. 示例1: 输入:A = [34,23 ...

  6. jquery与angular的交互

    HTML: <table class="table table-striped" ng-app="myApp"> <tr> <th ...

  7. [转]Mathjax语法总结

    链接地址:https://blog.csdn.net/ajacker/article/details/80301378

  8. 打开nginx配置的站点报错500

    打开站点报错500的原因 有很多,这里只说明一点:nginx 的fastcgi.conf配置引起的问题 环境说明 1 站点目录结构 wwwroot website public application ...

  9. Windows多网卡路由设置

    需要经常切换网络以满足不同的工作需求: 一会上生产线, 一会上测试机, 一会还要上外网查资料... 经常切来切去比较麻烦,可以尝试Windows的路由表 route ADD 64.0.0.0 MASK ...

  10. base64与图片输出屏幕

    if ($base64) { ob_start(); // 输出图像 imagepng($this->_image); imagedestroy($this->_image); $imag ...