MySQL——存储过程、函数、mysql变量

概述

存储过程函数都是事先经过编译并存储在数据库中的一段SQL语句的集合。
触发器其实也是一种存储过程
存储过程与函数的区别
1,函数必须有返回值,而存储过程没有。
2,存储过程的参数可以是IN、OUT、INOUT类型,函数的参数只能是IN
优点
1、存储过程只在创建时进行编译;
而SQL语句每执行一次就编译一次,所以使用存储过程可以提高数据库执行速度。
2、简化复杂操作,结合事务一起封装。
3、复用性好。
4、安全性高,可指定存储过程的使用权。
另外
并发量少的情况下,很少使用存储过程。
并发量高的情况下,为了提高效率,用存储过程比较多。

创建过程

delimiter $$
create procedure 过程名(形参列表)(列表可以为空)
begin
	SQL语句
end $$
delimiter;

调用:
call 存储过程名(实参列表)

例子:
in

delimiter $$
create procedure autoinsert(in a int)
begin
declare int i default 1;
while(i<=a)do
	insert into school.ti values x;
	set i=i+1;
end while;
end$$
delimiter ;

调用
call autoinsert(20)
或者
set @num=20; @不能少
call autoinsert(@num)
out

delimiter $$
create procedure p2(out a int)
begin
	select count(*) into a from table1;
end$$
delimiter ;

select @p;
call p2(@p);

in、out
create procedure p3(out a int,out b char(50),in c float(10,2))
inout
不多说了

function函数

创建函数的语法:
create function 函数名(参数列表)returns 返回值类型
[特性…]函数体
函数的参数形式:参数名 类型

delimiter $$
create function 函数名(参数列表)returns 返回值类型
begin
有效的SQL语句
end$$
delimiter ; 

调用:
select 函数名(实参列表)

例子:

create function hello (s char(20))
returns char(50) return concat('hello,',s,'!');

mysql变量术语分类

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

变量的赋值

直接赋值:set 变量名=表达式值或常量值。

用户变量的赋值

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

你可能感兴趣的:(mysql,数据库,sql)