【mysql】扩展-变量_存储过程_函数
一、变量
类似Java中的变量,MySQL也存在变量。变量分类:
- 系统变量
- 全局变量
- 会话变量
- 自定义变量
- 用户变量
- 局部变量
1.1、系统变量
说明:变量由系统定义,不是用户定义,属于服务器层面。 注意:全局变量需要添加global关键字,会话变量需要添加session关键字,如果不写,默认会话级别。
常见操作如下:
# 查看所有系统变量
show global|session variables;
# 查看满足条件的部分系统变量
show global|session variables like 'xxx';
# 查看指定的系统变量的值
select @@global|session.系统变量名;
# 为某个系统变量赋值
# 方式一:
set global|session 系统变量名=值;
# 方式二:
set @@global|session.系统变量名=值;# 设置隔离级别
set autocommit=0; #默认设置,设置会话的自动提交
set @@global.autocommit=0;# 查看隔离级别
select @@autocommit; #默认查询,查询会话的自动提交
select @@global.autocommit; #查询全局的自动提交
1.2、自定义变量
说明:变量由用户自定义,而不是系统提供的。 使用步骤:
- 声明
- 赋值
- 使用(查看、比较、运算等)
1.2.1、用户变量
作用域:针对于当前会话(连接)有效,作用域同会话变量。
赋值操作符:=或:=
# 声明并初始化
set @变量名=值;
set @变量名:=值;
select @变量名:=值;# 赋值,更新变量的值
# 方式1
set @变量名=值;
set @变量名:=值;
select @变量名:=值;
# 方式2,查询出的数据一定是单个值
select 字段 into @变量名 from 表;# 使用,查看变量的值
select @变量名;set @name='zs';
set @ct:=100;
select @ct:=0;select count(*) into @ct from emp;
select @ct;
1.2.2、局部变量
作用域:仅仅在定义它的
begin
、end
块中有效。 应用在begin
、end
中的第一句话。
# 声明
declare 变量名 类型;
declare 变量名 类型 [default 值];# 赋值
# 方式1
set 局部变量名=值;
set 局部变量名:=值;
select 局部变量名:=值;
# 方式2
select 字段 into 变量名 from 表;# 使用,查看变量的值
select 局部变量名;
1.2.3、用户变量和局部变量对比
作用域 | 定义和使用的位置 | 语法 | |
---|---|---|---|
用户变量 | 当前会话 | 会话中的任何地方 | 必须加@符号,不用限定类型 |
局部变量 |
begin 、end 块中
|
只能在begin 、end 块中,且为第一句话
|
不用加@符号,需要限定类型 |
二、存储过程
含义:一组预先编译好的SQL语句的集合,理解成批处理语句。
优势:
- 提高代码的重用性;
- 简化操作;
- 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率。
2.1、创建语法
create procedure 存储过程名(参数列表)
begin存储过程体(一组SQL语句)
end
说明:
如果存储过程体仅仅只有一句话,
begin
、end
可以省略;存储过程体中的每条sql语句的结尾要求必须加分号;
由于存储过程体使用分号表示结束,那么存储过程必须使用其他字符表示结尾。存储过程使用
delimiter
重新设置结尾;# 语法 delimiter 结束标记 # 案例 delimiter $
参数列表包含三部分:
- 参数模式
- in:该参数可以作为输入,也就是该参数需要调用方传入值
- out:该参数可以作为输出,也就是该参数可以作为返回值
- inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值
- 参数名
- 参数类型
2.2、调用语法
call 存储过程名(实参列表);
2.3、删除存储过程
drop procedure 存储过程名;
2.4、查看存储过程的信息
show create proceduce 存储过程名;
2.5、举例
# 创建存储过程,在部门表中添加两条数据
delimiter $
create procedure pro1()
begininsert into dept(dname, loc) values('aaa', 'bj'),('bbb', 'tj');
end $
# 调用存储过程
call pro1()$# 创建存储过程,根据部门名称查询部门名
delimiter $
create procedure pro2(in deptloc varchar(20))
beginselect dname from dept where loc=deptloc;
end $
# 调用存储过程
call pro2('北京')$# 创建存储过程,查询在特定部门从事特定工种的员工的信息和部门信息
delimiter $
create procedure pro3(in job varchar(20), in deptname varchar(20))
beginselecte.*, d.*fromemp e, dept dwheree.deptno=d.deptno and e.job=job and d.dname=deptname;
end $
# 调用存储过程
call pro3('文员','市场部')$# 创建存储过程,查询特定部门和特定工种的员工个数
delimiter $
create procedure pro4(in job varchar(20), in deptname varchar(20))
begindeclare result int default 0;selectcount(*) into resultfromemp e, dept dwheree.deptno=d.deptno and e.job=job and d.dname=deptname;select result as '个数';
end $
# 调用存储过程
call pro4('文员','市场部')$# 创建存储过程,查询特定部门和特定工种的员工个数
delimiter $
create procedure pro5(in job varchar(20), in deptname varchar(20), out result int)
beginselectcount(*) into resultfromemp e, dept dwheree.deptno=d.deptno and e.job=job and d.dname=deptname;
end $
# 调用
call pro5('文员', '研发部', @r);
select @r;# 创建存储过程,传入a和b两个值,最终a和b都翻倍并返回
delimiter $
create procedure pro6(inout num1 int, inout num2 int)
beginset num1=num1*2;set num2=num2*2;
end $
set @a=2$
set @b=3$
# 调用存储过程
call pro6(@a, @b)$
select @a$
select @b$
三、函数
含义:一组预先编译好的SQL语句的集合,理解成批处理语句。
优势:
- 提高代码的重用性;
- 简化操作;
- 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率。
与存储过程区别:
- 存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新;
- 函数:有且仅有1 个返回,适合做处理数据后返回一个结果。
3.1、创建语法
create function 函数名(参数列表) returns 返回类型
begin函数体
end
说明:
- 参数列表包含两部分:
参数名 参数类型
;- 函数体肯定会有return语句,如果没有会报错;
- 函数体中仅有一句话,则可以省略
begin
、end
;- 使用
delimiter
语句设置结束标记。
3.2、调用语法
select 函数名(参数列表)
3.3、查看函数
show create function 函数名;
3.4、删除函数
drop function 函数名;
3.5、案例
# 定义函数,查询员工数量
delimiter $
create function myfun1() returns int
begindeclare c int default 0;select count(*) into c from emp;return c;
end $
# 调用函数
select myfun1()$# 定义函数,根据工种查询员工数量
delimiter $
create function myfun2(job varchar(20)) returns int
begindeclare c int default 0;select count(*) into c from emp where emp.job=job;return c;
end $
# 调用函数
select myfun2('研发部')$# 定义函数,根据部门名称,查询平均工资
delimiter $
create function myfun3(dname varchar(20)) returns double
begindeclare avgsal double default 0;selecta.a into avgsalfromdept d, (select deptno, avg(sal) a from emp group by deptno) awhered.deptno=a.deptno and d.dname=dname;return avgsal;
end $
# 调用函数
select myfun3('研发部')$# 定义函数,求两数的和
delimiter $
create function myfun4(num1 int, num2 int) returns int
begindeclare sum int default 0;set sum:=num1+num2;return sum;
end $
# 调用函数
select myfun4(11,21)$
【mysql】扩展-变量_存储过程_函数相关推荐
- mysql基础——变量、存储过程和函数
目录 一.变量 1.1 基本介绍 1.2 系统变量 1.3 自定义变量 二.存储过程 2.1 基本介绍 2.2 存储过程的创建 2.3 存储过程的删除 2.4 存储过程的查看 2.5 ...
- 第15章_存储过程与函数(创建存储过程、调用存储过程、存储函数的使用、存储过程和函数的查看、修改、删除)
第15章_存储过程与函数 第15章_存储过程与函数 1. 存储过程概述 1.1 理解 1.2 分类 2. 创建存储过程 2.1 语法分析 2.2 代码举例 3. 调用存储过程 3.1 调用格式 3.2 ...
- MySQL06:变量、存储过程和函数、流程控制结构
6.变量.存储过程和函数.流程控制结构 变量 分类 系统变量: 全局变量 会话变量 自定义变量: 用户变量 局部变量 系统变量 说明:变量由系统定义,不是用户定义,属于服务器层面 注意:全局变量需要添 ...
- 使用变量_存储过程和函数及变量的使用
存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程和函数可以避免开发人员重复的编写相同的SQL语句.而且,存储过程和函数是在mys ...
- Mysql数据库基础知识(五)之:视图、变量、存储过程、函数、流程控制结构
第一部分:Mysql数据库基础知识(一)之 基础查询----分组查询 第二部分:Mysql数据库基础知识(二)之 连接查询----子查询-----分页查询------union联合查询 第三部分:My ...
- MySQL—变量、存储过程和函数(十一)
一.变量 1 变量的种类 1.1 系统变量 系统变量一共分为两种: 1)全局变量 ...
- 尚硅谷李玉婷老师MySQL课程--视图、变量、存储过程和函数、流程控制结构
一.视图 1.视图的创建 CREATE VIEW 视图名 AS 查询语句; 例1: create view myv as select avg(salary),job_id from employee ...
- MySQL(视图、存储过程与函数、流程控制、触发器)
第一章 视图 1 什么是视图 为了提高复杂的SQL语句的复用性和表的操作的安全性 ,MySQL数据库管理系统提高了视图特性,所谓视图,本质上是一种虚拟表,其内容与真实的表相似,包含一系列带有名称的列和 ...
- MySQL(8)存储过程和函数
字段名 数据类型 主键 外键 非空 唯一 自增 id INT 是 否 是 是 否 name VARCHAR(50) 否 否 是 否 否 glass V ...
- 变量、存储过程与函数
变量 分类 系统变量 全局变量 会话变量 自定义变量 用户变量 局部变量 系统变量 变量由系统提供,不是用户定义,属于服务器层面 查看所有的系统变量 SHOW GLOBAL | [SESSION] V ...
最新文章
- MLIR多级中间表示概述
- maven中打包项目为war包的pom.xml配置
- ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法
- C#线程、前后台线程
- 各种树:trie树、B树、B-树、B+树、B*树
- xhprof安装和使用方法(linux版本)
- SSL 1108——【USACO 2.1】海明码(DFS)
- 关于framework4.5的相关介绍
- SqlServer中查询某数据库所有表及其数据总条数和占用空间
- 湖南计算机专科学院分数线,湖南电子科技职业学院历年录取分数线
- 中望cad自定义快捷键命令_中望CAD快捷键全集
- 数据通信与计算机网络参考文献,通信工程论文参考文献
- JAVA就业管理系统(JAVA毕业设计)
- win7 计算机定时关机脚本,电脑设置定时关机的方法 win7系统怎么设置定时关机...
- Python爬虫实战 | (13) 爬取新浪滚动新闻
- 瑞士证交所主席认为发行加密瑞士法郎有益经济发展
- 微信隐藏/显示右上角菜单接口
- ojdbc6中的错误信息(中英) 【转】
- 毛球科技论述区块链之符号理论(下)
- 文件与异常及其相关函数(os模块)
热门文章
- P2661 信息传递
- (一)Quartz2.2.1 简单例子
- centos 挂载与卸载硬盘
- 后台代码调用Application Resources
- 拓端tecdat|python聚类算法的应用实例
- mysql比较varchar值大小_Mysql varchar大小长度问题
- rhel linux 自动 fsck,red hat as 4 启动报错:checking filesystems fsck.ext3: bad magic number ......
- detectron2 ImportError: cannot import name ‘_C‘ from ‘detectron2‘
- 数据挖掘著名学者的网站
- I/O多路复用技术(select/poll/epoll)