mysql存储过程、存储函数及流程控制

                    存储过程
一、基本语法
create procedure sp_name([proc_parameter[,...]])
[characteristic...]routine_body
begin
end
sp_name 表示存储过程的名字
proc_parameter 存储过程参数例表[IN OUT INOUT]三个部分组成
其中IN 表示传进来的参数
其中OUT 表示传出去的参数
其中INOUT 表示传进来但最终传回的参数
routine_body 参数是SQL代码的内容(类似于触发器的for each row)
begin..end标志SQL代码的开始和结束

二、关于IN OUT INPOUT的举例说明
IN 参数例子
delimiter &&
create procedure alvin1(
in p_in int) #设置传入的参数类型和变量
begin
select p_in;  #查询第一次传入的参数值
set p_in=2;   #内部重新赋值给p_in变量
select p_in;  #赋值后在此查询
end &&
delimiter ;
set @p_in=1;  #开始传入参数1
call alvin1(@p_in); #调用存储过程,查看和对比输出的值

OUT 参数例子
delimiter &&
create procedure alvin2(
out p_out int)
begin
select p_out;
set p_out=2;
select p_out;
end &&
delimiter ;
set @p_out=1; 传入的参数1之后
call alvin2(@p_out)调用了之后。是否和IN一样都显示出来了?还是无效?

INOUT 参数例子
delimiter &&
create procedure alvin3(
inout p_inout int)
begin
select p_inout;
set p_inout=2;
select p_inout;
end &&
delimiter ;

三、举例说明
需求:创建一个存储过程,要求(返回mysql的版本,用户 所在的数据库、用户名称)
delimiter &&
create procedure zy1(
out getversion varchar(30),
out userversion varchar(30),
out userdatabase varchar(30),
out userconnection int)
reads sql data
begin
select version() into getversion;
select user() into userversion;
select database() into userdatabase;
select connection_id() into userconnection;
end &&
delimiter ;

需求二、统计vendors vend_id的数量总共有多少条?
out zycount int
select count(*) into zycount from vendors

#====================================================
                              存储函数
create function sp_name([func_parameter[,.....]])
return type
[characteristic...]routine_body
begin...end
其中sp_name 存储函数的名称
func_parameter 函数参数列表
return type 指定返回的参数类型
routine_body SQL代码内容
begin..end标志SQL代码的开始和结束
注意:与存储过程不同,
1、参数只有输入类型
2、向调用方返回结果值

举例:
delimiter &&
create function alvin11(
bb_id int)
returns varchar(20)
begin
return(select vend_name from vendors where vend_id=bb_id);
end &&
delimiter ;

练习需求:编写一个存储函数,要求出入cust_id的的时候返回order_date这个字段的值
表名为:orders

#====================================================
                     流程控制
(1)存储过程if语句的使用方法
delimiter &&
create procedure zyif(
in aa int,out bb int)
begin
if aa>20 then
set bb=30;
elseif aa=20
then
set bb=20;
else
set bb=15;
end if;
end &&
delimiter ;

(2)存储过程case用法
delimiter &&
create procedure zy_case(in aa int,inout bb int)
begin
case
when aa=20 then set bb=20;
when aa>20 and aa<=50 then set bb=30;
when aa>51 then set bb=60;
else set bb=15;
end case;
end &&
delimiter ;

(3)while 循环使用,插入1万数据
创建一个表
create table zybb
(user_id int,
name varchar(10));
Query OK, 0 rows affected (0.10 sec)

delimiter &&
create procedure zy_while()
begin
declare count int default 0;
while count < 100000 do
insert into zybb(user_id,name)values(count,‘aaa1‘);
set count=count + 1;
end while;
end &&
delimiter ;
call zy_while() 调用存储过程

#===========================================================
(1)调用存储过程
call+存储过程名称+参数
如:call alvin_name(@p_inout)

(2)查询结果
select @p_inout

(3)查询存储过程
show procedure status\G;

(4)查询某个存储过程详细
show create procedure alvin1\G;

(5)查询存储函数
show function status\G;

(6)查询某个详细的存储函数
show create function alvin10\G;

(7)删除存储过程
drop procedure alvin1;

(8)删除存储函数
drop function alvin1;

mysql存储过程、存储函数及流程控制,布布扣,bubuko.com

时间: 2024-12-11 18:48:49

mysql存储过程、存储函数及流程控制的相关文章

视图,触发器,事务,存储过程,函数与流程控制,索引

一.视图 1.什么是视图 虚拟表:在硬盘中没有的,通过查询在内存中拼接的表 视图:通过查询得到一张虚拟表,保存下来,下次可直接使用 2.为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; 4.删除视图 drop view teacher2course; 5.强调

mysql数据库之 存储引擎、事务、视图、触发器、存储过程、函数、流程控制

目录 一.存储引擎 1.什么是存储引擎? 2.mysql支持的存储引擎 3. 使用存储引擎 二.事务 三.视图 1.什么是视图 2.为什么要用视图 3.如何用视图 四.触发器 为何要用触发器 创建触发器语法 五.存储过程 六.函数 七.流程控制 八.数据库备份(运维方向) 一.存储引擎 1.什么是存储引擎? mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用exce

mysql基础教程(四)-----事务、视图、存储过程和函数、流程控制

事务 概念 事务由单独单元的一个或多个SQL语句组成,在这 个单元中,每个MySQL语句是相互依赖的.而整个单独单 元作为一个不可分割的整体,如果单元中某条SQL语句一 旦执行失败或产生错误,整个单元将会回滚.所有受到影 响的数据将返回到事物开始以前的状态:如果单元中的所 有SQL语句均执行成功,则事物被顺利执行. 存储引擎 概念 在mysql中的数据用各种不同的技术存储 在文件(或内存)中. 查看 通过 show engines: 来查看mysql支持的存储引擎. 常见引擎 在mysql中用的

Mysql-自带的一些功能,基本用法(视图,触发器,事务,存储过程,函数,流程控制)

一. 视图 二. 触发器 三. 事务 四. 存储过程 五. 函数 六. 流程控制 一 .视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦

数据库---视图,触发器,事务,存储过程 ,函数,流程控制, 索引与慢查询优化,测试索引,数据库三范式(简介)

视图 1.什么是视图 ? 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 ? 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; 强调 1.在硬盘中,视图只有表结构文件,没有表数据文件 2.视图通常是用于查询,尽量不要修改视图中的数据 drop

视图、触发器、事务、存储过程、函数、流程控制、索引与慢查询优化

一.视图 1.什么是视图 视图就是将SQL语句的查询结果得到的一张虚拟表,保存下来仅保留表结构,这张虚拟表就是视图 2.为什么要用视图 为了便于后期直接查询,节省拼接表的时间消耗 3.怎么用视图 语法:create view 视图名 as sql语句 create view class_student as select * from class inner join student on class.cid = student.class_id; 注意:1.创建出来的视图只有表结构,没有表数据

视图,触发器,事务,存储过程,函数,流程控制,

一,视图1,什么是视图? 视图就是通过查询得到一张虚拟表,然后保存下来,下次用的话直接使用即可2,为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询3,怎么用? 在查询前面加 create view 视图名称 as sql语句 create view teacher_view as select tid from teacher where tname='李平老师': 强调:在硬盘中,视图只有表结构文件,没有数据文件 视图开发尽量不用 因为是在mysql里面 ,视图通常用于插叙,尽量不要

视图、触发器、事物、存储过程、函数、流程控制

一.视图 视图是一张虚拟表,并不是真是存在的,用户可以直接使用创建完的视图名称获取结果集,该结果集可当表使用. 1.创建视图 语法:create view 视图名称  as sql语句 注意:字段名不能重复    视图是存放至数据库当中的,且视图是为了简化查询的sql语句,但是不应该更改视图中的记录.若更改了视图中的记录,有可能会影响到原来数据库中的记录. mysql> select * from t; +----+--------+----------+ | id | NAME | passw

Learning-MySQL【6】:视图、触发器、存储过程、函数、流程控制

一.视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次用的直接使用即可.使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的 SQL 语句了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的 SQL 过分依赖数据库中的视图,即强耦合,那就意味着扩展 SQL 极为不便,因此并不推荐使用. -- 1. -- 视图是一个虚拟表(非正式存在),其本质是其本质是 -- [根据SQL语句获取动态的数据集