MySQL必备知识存储过程和函数

存储过程和函数的概念

存储过程和视图类似,都是一个事先写好命令并编译后存在数据库中的MySQL语句集合。是用于简化开发人员的工作,减少数据在数据库和应用服务器之间传输,提高处理效率的。

存储过程和函数的区别

既然是函数,就会有值的传入和传出,其中存在的区别为:
存储过程:参数的传递(参数类型)能用 IN 、 OUT 、 INOUT ,并且没有直接的返回值。

IN 表示数据传入
OUT 表示数据传出
INOUT 表示既可以传入又可以传出

函数:参数只能使用IN,并且必须要有返回值。
存储过程内不能使用 use 切换数据库

存储过程

存储过程 语句(procedure)

无参存储过程

创建无参存储

delimiter 
// ##开始创建存储过程 
create procedure 存储过程名() 
begin 
#SQL语句1; 
#SQL语句2; 
#SQL语句3; 
#SQL语句4; 
end//

delimiter

MySQL执行的过程中,会以 ; 作为结束命令
delimiter 是一个编译器指令,告诉MySQL解释器,MySQL是否可以执行了,该段命令是否已经结束了
delimiter 指令的使用

#将结束符变成别的用法 
delimiter  
#存储过程 
#结束符变成 ; 
delimiter ;

调用存储过程

call 存储过程名();

call 存储过程(变量);

查看存储过程

 show create procedure 存储过程名;

删除存储过程

drop procedure 存储过程名;

修改存储过程

alter procedure 存储过程名;

带参存储过程

创建带参存储过程

create procedure 存储过程名( 
in[out][inout] 参数名1 参数类型1, 
in[out][inout] 参数名2 参数类型2,……, 
in[out][inout] 参数名n 参数类型n) 
begin 
#SQL语句; end;

调用带参存储过程

call 存储过程名(参数值1,参数值2,……,参数值n);

运用带参存储过程查询数据

例如:

create procedure insert_stu( 
in sname varchar(255) ,in sex enum('男','女'),in age int ) 
   begin
   ##查询插入的数据 
   select sname,sex,age; 
   ##插入数据 
   insert into student_tb(s_name,s_sex,s_age) 
   value(sname,sex,age); 
   end$$ 
   ## 调用存储过程 
   call insert_stu('小明','男',21); 
   call insert_stu('小李','女',20);

运用带参存储过程插入数据

例如:

create procedure put(in stu_no int,in stu_name varchar(30),
  in stu_birthday date,
  in stu_cno int) 
  begin 
  insert into student 
  values(stu_no,stu_name,stu_birthday,stu_cno); 
  end; 
  call putstr(11,'小海','2000-1-1',2);

会话变量

查看会话变量 当前连接有效 重新连接恢复默认值
其他的客户端看不到自己定义的会话变量

## 查看会话变量 
show session variables;

全局变量

当前服务器启动时有效
重启服务恢复默认值

## 查看全局变量 
show global variables;

注意:有些变量都是系统自定义的,用于存储数据库中的默认数据

自定义函数

create function 函数名(函数参数 类型) 
returns 返回值类型 
begin
##逻辑代码 
return(函数返回值) 
end;

8.0版本数据库,增加了一个安全选项
需要执行一段下面的代码才能创建函数

set global log_bin_trust_function_creators=TRUE;

调用函数

直接使用函数

 select 函数名(函数参数);

函数参数可以用查询的表格数据作为参数

select 函数名(表格属性) from 表格名

删除函数

drop function 函数名;

存储过程和函数的区别

1.函数只能返回一个变量,而存储过程可以返回多个;
2.函数的限制比较多,不能用临时表(select),只能用表变量,存储过程限制少;
3. 存储过程处理的功能比较复杂,而函数实现的数据科学计算针对性强;
4.存储过程可以执行修改表的操作,但是函数不能执行一组修改全局数据库状态的操作;
5.存储过程可以通过out返回多个参数,如记录集,函数只能返回值或者表对象

总结

1.存储过程的使用
2.函数的使用
3.函数和存储过程的区别

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章