MySQL存储过程及函数

**1.存储过程**
delimiter $
drop procedure if exists p1
create procedure p1(idn varchar(30))
begin
select name  from t1
where id = idn;
end;
delimiter ;
**2.函数**
delimiter $
drop function if exists f1
create function f1(name varchar(100))
begin
declare str varchar(50) default '';
set @names = name;
set str = concat("create table",@names,"(id int,name varchar(20));");
return str;
end $
delimiter ;
/* 
MySQL定义变量的分类:
1.局部变量
mysql局部变量,只能用在begin/end语句块中,比如存储过程中的begin/end语句块;
其作用域仅限于该语句块;
局部变量的设置方式
declare var_name [, var_name]... data_type [ DEFAULT value ] ;
set语句语法形式set var_name=expr [, var_name=expr]...; set语句既可以用于			
局部变量的赋值,也可以用于用户变量的申明并赋值
declare c int default 0;
set c=a+b;
select c as C;
或者用select …. into…形式赋值
select into 语句句式:select col_name[,...] into var_name[,...] table_expr 	
[where...];
在调用存储过程时,以declare声明的变量都会被初始化为null
2.用户变量
mysql用户变量,mysql中用户变量不用提前申明,在用的时候直接用“@变量名”使用就可以了;
其作用域为当前连接;
定义用户变量有以下两种方式:
用户变量的变量名的形式为@varname的形式
名字必须以@开头
set @num=1; 或set @num:=1;
select @num:=1; 或 select @num:=字段名 from 表名 where … ;
如果这个查询返回多个值的话,那@name变量的值就是最后一条记录的	
password字段的值;
用户变量可以作用于当前整个连接,但当当前连接断开后,其所定义的用户变	
量都会消失;
**注意**:对用户变量赋值有两种方式,一种是直接用”=”号,另一种是用”:=”	
号。其区别在于使用set命令对用户变量进行赋值时,两种方式都可以使用;当	
使用select语句对用户变量进行赋值时,只能使用”:=”方式,因为在select语句	
中,”=”号被看作是比较操作符 ;set语句还可以设置会话变量和全局变量;
3.系统变量 -->系统变量又分为全局变量与会话变量
					全局变量在MySQL启动的时候由服务器自动将它们初始化为默认	
					值,这些默认值可以通过更改my.ini这个文件来更改;
					会话变量在每次建立一个新的连接的时候,由MySQL来初始化;
					MySQL会将当前所有全局变量的值复制一份。来做为会话变量;
					也就是说,如果在建立会话以后,没有手动更改过会话变量与全局	
					变量的值,那所有这些变量的值都是一样的;
					全局变量与会话变量的区别就在于,对全局变量的修改会影响到整		
					个服务器,但是对会话变量的修改,只会影响到当前的会话(也
					就是当前的数据库连接);
					有些系统变量的值是可以利用语句来动态进行更改的,但是有些系
					统变量的值却是只读的;对于那些可以更改的系统变量,我们可以
					利用set语句进行更改;
					不过要想更改全局变量的值,需要拥有super权限 ;
			系统变量在变量名前面有两个@;
			{
				3.1. 会话变量
				mysql会话变量,服务器为每个连接的客户端维护一系列会话变量;
				其作用域仅限于当前连接,即每个连接中的会话变量是独立的;
				set session varname = value;
				set @@session.varname = value;
				set var_name = value;
				查看所有的会话变量
				show session variables;
				查看一个会话变量
				select @@var_name;
				select @@session.var_name;
				show session variables like "%var%";
				session可以用local来代替
				3.2.全局变量
				mysql全局变量,全局变量影响服务器整体操作;
				当服务启动时,它将所有全局变量初始化为默认值;
				要想更改全局变量,必须具有super权限;
				其作用域为server的整个生命周期;
				set global var_name = value; 
				set @@global.var_name = value; 
				查看所有的全局变量 
				show global variables; 
				要想查看一个全局变量,有如下两种方式:
				select @@global.var_name;
				show global variables like “%var%”;
				// 若不指定关键字global、local、session,则默认使用session
				}
**注意**:在调用存储过程时,以declare声明的变量(**局部变量**)都会被初始	
化为null;
而以@开头的变量(**会话变量**)则不会被再初始化,在一个会话内,只须初始	
化一次,之后在会话内每次对变量值的更改都只是对计算结果的保存,就相当
于是这个会话内的全局变量;
set和declare的区别:
set 不需要声明类型,declare必须指定类型;
set 位置可以任意, declare 必须在复合语句的开头,在任何其它语句之前;
存储过程的调用 call procedure_name(parameters);
当调用带**out参数**的存储过程时,可以定义一个用户变量作为该参数的实参;
函数调用 select function_name(parameters);
mysql的concat函数拼接字符串时,如果有一个字符串为空,则结果为空;
系统变量不能以**select into**的形式赋值;
元数据:描述数据属性(property)的信息,亦可称为描述数据的数据;
*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值