MySql数据库---存储过程

存储过程概念

MySQL 5.0 版本开始支持存储过程。
简单的说,存储过程就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法,类似Python中的函数;
存储过就是数据库 SQL 语言层面的代码封装与重用

入门案例

语法:

delimiter 自定义结束符号
create procedure 储存名([ in ,out ,inout ] 参数名 数据类型...)
beginsql语句...
end 自定义的结束符合
delimiter ;
​
-- 调用存储过程
call 储存名();

案例:

delimiter $$
create procedure proc01()
beginselect empno,ename from emp; 
end  $$
delimiter ;
​
-- 调用存储过程
call proc01();

驱动调整

变量定义

局部变量

变量可以在存储过程中临时存储查询的结果.最后汇总计算成为功能需要的结果.

案例:

-- todo 在存储过程中定义变量-----------------------------------
delimiter $$
create procedure proc02()
begin-- todo 定义变量declare name varchar(20) default 'tom';-- todo 修改变量的值set name = 'jerry';select name ;
end $$
delimiter ;
​
call proc02();
​
----------------------------------------------------------------
delimiter $$
create procedure proc03()
begin-- todo 定义变量declare var_name varchar(20) default 'tom';declare var_sal double;-- todo 使用select ... into 变量名  -- 修改变量的值select ename into var_name from emp where empno = 1001;select sal into var_sal from emp where empno = 1001;select var_name , var_sal;
end $$
delimiter ;
​
call proc03();

用户会话变量

用户会话变量可以在当次连接的全局生效.不同的存储过程都可以使用该变量.
注意: 用户连接断开后用户变量会消失.
-- todo 用户会话变量----------------------------------------
delimiter $$
create procedure proc04()
begin-- todo 使用用户会话变量set @var_name = 'hello';select @var_name;
end $$
delimiter ;
​
call proc04();
​
-- todo 在任意的地方直接查询用户变量.
select @var_name; -- todo 用户变量的生命周期高于局部变量
# select var_sal; -- todo 局部变量只能在存储过程中使用.

系统变量

系统变量是mysql服务器自己定义的变量.用户设置mysql服务器的功能.
​
会话变量在每次建立一个新的连接的时候,由MYSQL来初始化。MYSQL会将当前所有全局变量的值复制一份。来做为会话变量。
也就是说,如果在建立会话以后,没有手动更改过会话变量与全局变量的值,那所有这些变量的值都是一样的。
​
修改会话变量 : (本次用户连接的会话生效)----
修改全局变量 : (整个服务器生效)-----------
-- todo 系统变量--全局变量(整个服务器)------------
-- 查看全局变量
show global variables;
-- 查看某全局变量
select @@global.auto_increment_increment;
-- 修改全局变量的值
set global sort_buffer_size = 40000;
select @@global.sort_buffer_size;
select @@global.autocommit;-- 1表示自动提交
​
​
-- todo 系统变量--会话变量(本次用户连接的会话)----
-- 查看会话变量
show session variables;
-- 查看某会话变量
select @@session.auto_increment_increment;
-- 修改会话变量的值
set session sort_buffer_size = 50000;
set @@session.sort_buffer_size = 50000 ;
​
select @@session.sort_buffer_size;
select @@global.sort_buffer_size;

带参数存储过程

参数可以提高存储过程的灵活性和扩展性.
in:    输入入参
out:   输出参数
inout: 输入输出参数

in 参数

-- todo  带有 in 参数 的存储过程
-- 封装有参数的存储过程,传入员工编号,查找员工信息
delimiter $$
create procedure proc06(in in_empno varchar(20)) -- todo 定义参数
beginselect * from emp where empno = in_empno;-- todo使用参数
end $$
delimiter ;
​
call proc06('1001');-- todo 传递参数
call proc06('1002');
​
​
-- 封装有参数的存储过程,可以通过传入部门名和薪资,查询指定部门,并且薪资大于指定值的员工信息
delimiter $$
create procedure proc07(in in_deptno int,in in_sal decimal(7,2))
beginselect * from emp where deptno = in_deptno and sal > in_sal;
end $$
delimiter ;
​
call proc07(10,15000);

out参数

-- todo  带有 out 参数 的存储过程
-- 封装有参数的存储过程,传入员工编号,返回员工名字
delimiter $$
create procedure proc08(in in_empno int,out out_ename varchar(20))
beginselect ename into out_ename from emp where empno =  in_empno;
end $$
delimiter ;
​
call proc08(1001,@outname);
-- 检查 我们的 out参数中的值
select @outname;
​
-- 封装有参数的存储过程,传入员工编号,返回员工名字和薪资
​
delimiter $$
create procedure proc09(in in_empno int,out out_ename varchar(20),out out_sal double)
beginselect ename,sal into out_ename,out_sal from emp where empno =  in_empno;select '查询成功';
end $$
delimiter ;
​
call proc09(1001,@outname,@outsal);
select @outname,@outsal;

inout参数

-- 传入员工名,拼接部门号,传入薪资,求出年薪
delimiter $$
create procedure proc10(inout inout_ename varchar(20),inout inout_sal int)
beginselect concat_ws('_',deptno,inout_ename) into inout_ename from emp where ename = inout_ename;-- 查询部门并且拼接set inout_sal = inout_sal * 12; -- 计算年薪
end $$
delimiter ;
​
-- todo 给参数赋值
set @my_name = '甘宁';
set @imy_sal = 8000;
​
-- 调用存储过程
call proc10(@my_name,@imy_sal);
​
-- 查询参数值
select @my_name, @imy_sal ;

if判断结构

语法:

if search_condition_1 then statement_list_1[elseif search_condition_2 then statement_list_2] ...[else statement_list_n]
end if
​

案例:

-- todo if 判断
​
-- 输入学生的成绩,来判断成绩的级别:
delimiter $$
create procedure proc11(in in_score int)
begindeclare result varchar(20);if in_score < 60 then set result='不及格';elseif in_score < 80 then set result='及格';elseif in_score < 90 then set result='良好';elseif in_score <= 100 then set result='优秀';else set result='成绩错误';end if;select result;
end $$
delimiter ;
​
call proc11(90);
​
​
-- 输入员工的名字,判断工资的情况。
​
delimiter $$
create procedure proc12(in in_name varchar(20))
begindeclare var_sal int ;-- 定义局部变量(生命短暂-存储过程结束就挂)declare var_res varchar(20);select sal into var_sal from emp where ename = in_name;if var_sal < 10000 then set var_res = '试用薪资';elseif var_sal <30000 then set var_res = '转正薪资';else set var_res = '元老薪资';end if;if var_sal is null then set var_res = '没有薪资';end if;select in_name,var_sal,var_res;
end $$
delimiter ;
​
call proc12('甘宁');
call proc12('');

case when 结构

-- todo case when 判断结构
-- 语法一(类比java的switch):
# case case_value
#     when when_value then statement_list
#     [when when_value then statement_list] ...
#     [else statement_list]
# end case
​
-- 语法二:
# case
#     when search_condition then statement_list
#     [when search_condition then statement_list] ...
#     [else statement_list]
# end case
-- 语法一(类比java的switch):
# case case_value
#     when when_value then statement_list
#     [when when_value then statement_list] ...
#     [else statement_list]
# end case
​
-- todo 需求:定义存储过程,传入季节,返回该季节对应的活动.
delimiter $$
create procedure proc13(in in_season varchar(20))
begincase in_seasonwhen '春季' then select '踏青....' as res;when '夏季' then select '漂流....' as res;when '秋季' then select '烧烤....' as res;when '冬季' then select '冬眠....' as res;else select '欢迎来到另一个世界....' as res;end case;
end $$
delimiter ;
​
call proc13('秋季');
​
​
-- 语法二:
# case
#     when search_condition then statement_list
#     [when search_condition then statement_list] ...
#     [else statement_list]
# end case
​
-- 根据用户名查询用户的入职日期.入职是2000年的薪资涨1000,入职是2001年的薪资涨500,其它涨200
​
delimiter $$
create procedure proc14(in in_name varchar(20))
begin-- 定义变量记录薪资declare var_sal int;declare var_year date;-- 把查询到的某个员工的薪资赋值给 var_sal ,入职日期赋值给var_yearselect sal,hiredate into var_sal , var_year from emp where ename = in_name;casewhen year(var_year) = 2000 then set var_sal = var_sal + 1000;when year(var_year) = 2001 then set var_sal = var_sal + 500;else set var_sal = var_sal + 200;end case ;select in_name,var_sal;
end $$
delimiter ;
​
call proc14('甘宁');
call proc14('张飞');
call proc14('诸葛亮');

while循环结构

-- 创建测试表
create table user (uid int primary key,username varchar ( 50 ),password varchar ( 50 )
);
​
-- 定义存储过程.实现可以制造任意条测试数据.
delimiter $$
create procedure proc15(in in_count int)
begin-- 使用循环,让插入数据的代码走多次.declare i int default 1;-- todo (1)定义循环初始变量while i <= in_count do -- todo (2)判断循环变量是否满足循环条件insert into user(uid,username,`password`) values(i,concat('user-',i),'123456');-- todo (3)循环体set i = i+1;-- todo (4)循环变量自增end while ;
end $$
delimiter ;
truncate user;
call proc15(10000);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1558873.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

多项目管理怎么进行❓看这篇就够了

多项目管理是一个复杂而细致的过程&#xff0c;涉及多个项目的同时进行和协调。首先&#xff0c;明确每个项目的目标和范围至关重要。在项目开始之初&#xff0c;应对所有项目进行全面评估&#xff0c;确定其战略价值、影响范围和资源需求。这有助于为每个项目设定清晰的优先级…

反应香精市场报告:预计2030年全球市场规模将达到264.3亿美元

“反应香精”通常是指通过在食品或饮料加工过程中发生的物理、化学或酶反应而产生的风味剂。可以有意添加这些香料以增强最终产品的味道、香气或其他感官方面。它们通常用于食品和饮料行业&#xff0c;以保持一致性、提高适口性或创造独特的风味特征。生产工艺香料的方法有多种…

新网站做谷歌SEO为什么短期内很难看到显著效果?

对于一个全新的网站来说&#xff0c;SEO的效果往往不会在短期内显现。这是因为SEO需要时间来积累权重和信任度。谷歌对新网站通常会有一个观察期&#xff0c;在这段时间内&#xff0c;网站的表现不稳定&#xff0c;排名也会波动较大&#xff0c;这是正常情况&#xff0c;这时候…

excel表格转换为在线成绩查询怎么制作?

在当前“双减”政策的背景下&#xff0c;学生的考试成绩不再被公开展示&#xff0c;这是对学生隐私的一种保护。然而&#xff0c;这同时也带来了一个新的问题&#xff1a;家长们对于孩子成绩的关切并未减少&#xff0c;他们依然迫切想要了解孩子的学习情况。以往&#xff0c;成…

使用Provide和Inject设计Vue3插件

使用provide和inject的Vue依赖项注入非常适合构建Vue3插件或避免prop多层传递。 尽管不经常使用它&#xff0c;但是您可以仅使用两个内置方法来实现依赖项注入&#xff1a;provide和inject。 查看Composition API文档&#xff0c;在Vue 3.0中&#xff0c;使用Provide和Inject进…

深度学习:循环神经网络—RNN的原理

传统神经网络存在的问题&#xff1f; 无法训练出具有顺序的数据。模型搭建时没有考虑数据上下之间的关系。 RNN神经网络 RNN&#xff08;Recurrent Neural Network&#xff0c;循环神经网络&#xff09;是一种专门用于处理序列数据的神经网络。在处理序列输入时具有记忆性…

基于RSSI原理的蓝牙定位程序(matlab代码,3维空间、基站数量>3即可,可自适应)

目录 商品描述 商品描述 这款基于接收信号强度指示&#xff08;RSSI&#xff09;原理的蓝牙定位程序&#xff0c;专为需要高效、可靠定位解决方案的开发者和研究人员设计。无论是在室内环境还是复杂的三维空间&#xff0c;该程序都能通过N个蓝牙锚点&#xff0c;实现对未知点的…

20.安卓逆向-frida基础-hook分析调试技巧2-hookDES

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要盲目相信。 工…

【在Linux世界中追寻伟大的One Piece】DNS与ICMP

目录 1 -> DNS(Domain Name System) 1.1 -> DNS背景 2 -> 域名简介 2.1 -> 域名解析过程 3 -> 使用dig工具分析DNS 4 -> ICMP协议 4.1 -> ICMP功能 4.2 -> ICMP报文格式 4.3 -> Ping命令 4.4 -> traceroute命令 1 -> DNS(Domain Na…

HTB:Markup[WriteUP]

目录 连接至HTB服务器并启动靶机 1.What version of Apache is running on the targets port 80? 2.What username:password combination logs in successfully? 使用Yakit并使用TOP1000字典对密码进行爆破 3.What is the word at the top of the page that accepts use…

Python基础之List列表用法

1、创建列表 names ["张三","李四","王五","Mary"] 2、列表分片 names[1]&#xff1a;获取数组的第2个元素。 names[1:3]&#xff1a;获取数组的第2、第3个元素。包含左侧&#xff0c;不包含右侧。 names[:3]等同于names[0:3]&…

AD中显示Selection includes locked items.Continue?

因为框选拖动组里包含锁定的元器件&#xff0c;所以出现如下提示&#xff1b; 可以单击锁定元器件&#xff0c;点击location的锁形标记即可显示解锁的状态。 解锁之后&#xff1a; 然后就可以拖动框选的元器件了。

项目管理系统:提升企业项目管理效率的关键

随着市场的快速变化和企业业务的日益复杂&#xff0c;项目管理已成为企业成功的关键因素。但现阶段&#xff0c;企业项目管理正遭遇诸多棘手的挑战&#xff0c;让项目的实施充满不确定性。好在项目管理系统应运而生&#xff0c;为企业带来了新的希望和转机。但面对琳琅满目的项…

天津自闭症孩子寄宿制学校:关注每个孩子的成长与幸福

自闭症&#xff0c;这一复杂且日益受到关注的神经发育障碍&#xff0c;给患儿及其家庭带来了诸多挑战。在天津及全国范围内&#xff0c;越来越多的自闭症寄宿学校应运而生&#xff0c;致力于为这些特殊孩子提供全面的教育、康复和生活支持。而在遥远的广州&#xff0c;星贝育园…

【万字长文】Word2Vec计算详解(三)分层Softmax与负采样

【万字长文】Word2Vec计算详解&#xff08;三&#xff09;分层Softmax与负采样 写在前面 第三部分介绍Word2Vec模型的两种优化方案。 【万字长文】Word2Vec计算详解&#xff08;一&#xff09;CBOW模型 markdown行 9000 【万字长文】Word2Vec计算详解&#xff08;二&#xff0…

ComfyUI【基础篇】:小白都可以学会的ComfyUI安装教程(原生版安装包)

大家我是极客菌&#xff01;&#xff01;&#xff01;&#xff01; 自从Flux这一款最新黑马文生图模型推出以来&#xff0c;Flux的浪潮正以不可阻挡之势席卷全球&#xff0c;目前本地电脑环境要玩Flux, 支持方式主要是ComfyUI。但是ComfyUI工具安装一直是很多小白比较困惑的地…

C++ 非STL数据结构学习——1.2 并查集

并查集的基本原理&#xff1a;四海之内的人&#xff0c;通过祖宗放在关联在一起。 例如&#xff0c;A的祖宗是B&#xff0c;B的祖宗又是C&#xff0c;D的祖宗若是C&#xff0c;则认为A和C就是一个集合的。 也就是说&#xff0c;每个元素有自己的祖宗信息&#xff0c;如果两元…

磁盘整理工具 IObit Smart Defrag Pro 免安装版

IObit Smart Defrag Pro 是一款功能强大的磁盘碎片整理工具。IObit Smart Defrag Pro最新版具有世界领先的碎片整理能力&#xff0c;IObit Smart Defrag Pro最新版不仅可以提供碎片整理功能&#xff0c;还可以根据使用频率智能地简化文件&#xff0c;从而加快磁盘速度并提高整个…

UR5机器人DH参数及其雅克比矩阵

UR5机器人有6个旋转关节&#xff08;R关节&#xff09;&#xff0c;其DH参数如下&#xff1a; 关节 iiiaia_iai​ (m)did_idi​ (m)αi\alpha_iαi​ (rad)θi\theta_iθi​ (rad)100.089159π2\frac{\pi}{2}2π​θ1\theta_1θ1​2-0.42500θ2\theta_2θ2​3-0.3922500θ3\th…

基于vue框架的大学生职业测评系统j8ag1(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;学生,职业探索,职业分类,自我认知,绿色未来,测评报告 开题报告内容 基于Vue框架的大学生职业测评系统项目功能主要包括以下几个方面&#xff1a; 一、核心功能 学生信息管理 记录并管理学生的基本信息&#xff0c;如姓名、性别、年龄、…