文章目录
存储过程和函数的概念
存储过程和视图类似,都是一个事先写好命令并编译后存在数据库中的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.函数和存储过程的区别