MYSQL储存过程和储存函数和变量

储存过程和储存函数和变量

变量的应用:

在这里插入图片描述

变量分类为: 系统变量和自定义变量

系统变量和全局变量还可以细分:

系统变量分类: 全局变量和会话变量

自定义变量分类: 用户变量和局部变量

下面是变量的一些具体用法:
系统变量

说明:变量由系统提供,不是用户定义,属于服务器层面;
1.查看所有的系统变量:
show global| session variables;
(global全局变量,‘|’代表二选一,session会话变量)

2.产看满足条件的部分系统变量:
show global | session variables like ‘模糊查询’;
3.查看指定的某个指定系统变量的值:
select @@global | session.系统变量名;
4.为某个系统变量赋值(两种方式):
set global| session 系统变量名=值;
set @@global| session.系统变量名=值;
5.使用系统变量:
select @用户变量名;
注意: 如果是全局变量则需要加globle,如果是会话变量则加session,如果不写则默认为会话变量。
6.全局变量的作用域:
服务器每一次启动都会为所有的全局变量赋初始值,针对所有的会话(连接)有效,但是不能跨重启。 会话变量的作用域: 仅仅针对于会话(连接)有效,

用户变量

1.用户变量作用域:针对于当前会话(连接)有效;
2.使用步骤:
声明、赋值,使用 (自定义变量要求声明的的同时必须初始化)
声明并初始化(有三种方式):
set @用户变量名 =值;
set @用户变量名:=值;
select @用户变量名:=值;
(初始化的同时也相当于给自定义变量第一次赋值)
赋值(有四种方式):
set @用户变量名 =值;
set @用户变量名:=值;
select @用户变量名:=值;
select 字段 into 用户变量名 from 表;
(要求查询出来的字段值为一个,一组的话无法赋值)
eg: select count(*) into @name from employees;
3.用户变量使用:
select @用户变量名;

局部变量:

1.作用域:仅仅在定义它的begin and中有效;应用在begin and的第一句话
2.使用步骤:
声明:DECLARE 变量名 类型;
声明同时赋值:DECLARE 变量名 类型 DEFAULT 值;
赋值(四种方式):
(一个set语句可以为多个变量赋值,各个变量赋值语句之间用‘,’隔开)
set 局部变量名=值;
set 局部变量名:=值;
select @局部变量:=值;
select 字段 into 局部变量名 from 表 WHERE 限定条件;
3.使用局部变量:select 局部变量名;

例:
#1,查看系统的全局变量
show global variables;

#2.查看部分的全局变量
show global variables like ‘char%’;

#3.查看指定是某个全局变量
SELECT @@global.autocommit;

储存过程

存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合。

语法格式:
create procedure 储存过程名(参数列表)
begin
	储存过程体(sql语句)
and

1.参数列表包含三部分
参数模式 参数名 参数类型
举例:
in stuname varchar(20);

参数模式: 
in 	该参数可以作为输入,需要调用方传入值
out 	该参数可以作为输出,该参数可以作为返回值
inout		该参数既可以作为输入又可以作为输出

2.如果储存过程体中仅仅有一句话:begin and可以省略
3.
储存过程体中每条SQL语句的结尾都必须要使用;结尾;
储存过程的结尾可以使用delimiter重新设置语句结束标识符;

语法:delimiter 结束标记;

MySQL储存过程的语句块以begin开始,以end结束。语句体可以包含变量的声明、控制语句、sql查询语句等。由于储存过程内部语句要以分号结尾,所以出现在定义储存过程之前,应将语句结束标志“;”更改为其他字符,并且因该降低该字符在储存过程那个中出现的机率,更改结束标志可以使用delimiter关键字定义。

调用储存过程语法

语法格式:
call 储存过程名(实参列表);

对储存过程中的参数模式具体分析

空参列表:

在这里插入图片描述

带IN的参数列表

在这里插入图片描述

带out的参数列表

在这里插入图片描述

带INOUT的参数列表

在这里插入图片描述

储存过程和储存函数的区别

存储过程和函数的区别:

	函数必须有返回值,而存储过程没有。
	存储过程的参数可以是IN、OUT、INOUT类型,函数的参数只能是IN
优点:
	存储过程只在创建时进行编译;而SQL语句每执行一次就编译一次,所以使用存储过程可以提高数据库执行速度。
	简化复杂操作,结合事务一起封装。
	复用性好
	安全性高,可指定存储过程的使用权

说明:

并发量少的情况下,很少使用存储过程。
并发量高的情况下,为了提高效率,用存储过程比较多。

mysql变量的术语分类

1.用户变量:以"@“开始,形式为”@变量名",由客户端定义的变量。
用户变量跟mysql客户端是绑定的,设置的变量只对当前用户使用的客户端生效,当用户断开连接时,所有变量会自动释放。
2.全局变量:定义时如下两种形式,set GLOBAL 变量名 或者 set @@global.变量名
对所有客户端生效,但只有具有super权限才可以设置全局变量。
3.会话变量:只对连接的客户端有效。
4.局部变量:设置并作用于begin…end语句块之间的变量。
declare语句专门用于定义局部变量。而set语句是设置不同类型的变量,包括会话变量和全局变量
语法:declare 变量名[…] 变量类型 [default 值]
declare定义的变量必须写在复合语句的开头,并且在任何其它语句的前面。

变量的赋值:
直接赋值: set 变量名=表达式值或常量值[…];

用户变量的赋值:
1、set 变量名=表达式或常量值;
2、也可以将查询结果赋值给变量(要求查询返回的结果只能有一行)
例:set 列名 into 变量名 from 表名 where 条件;
3、select 值 into @变量名;
客户端变量不能相互共享。

储存函数

创建语法:
		create FUNCTION 函数名(参数列表) RETURNS 返回类型
		
		begin 
				函数体
		AND
	
注意:
		
		参数列表包含两部分:
		
			参数名 参数类型
			
(函数体不定会有return语句,如果ruturn语句没有放在函数体最后也不会报错,但是不建议)
			
			当函数体只有一句话的时候,begin and可以省略
			
			delimiter 语句设置结束的标识符;

2.调用函数

SELECT 函数名(参数列表);

查看储存过程和储存函数

show cerate {procedure| function} 存储过程名;

删除储存过程和储存函数

drop {PROCEDURE | FUNCTION } 存储过程名;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值