mysql--存储过程和函数

存储过程和函数

存储过程和函数的概念

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

存储过程和函数的区别

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

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

函数:参数只能使用IN,并且必须要有返回值。

存储过程

存储过程 语句(procedure)

无参存储过程

创建无参存储

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

delimiter

MySQL执行的过程中,会以 ; 作为结束命令

delimiter 是一个编译器指令,告诉MySQL解释器,MySQL是否可以执行了,该段命令是否已经结束了

delimiter 指令的使用

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 setData(
	in c_id int,in c_name varchar(20),in c_age int)
begin
    insert into student_tb value(c_id,c_name,'女',c_age,null);
    select * from student_tb;
end$$

##调用存储过程
call setData(21,'张三',rand()*10+10);
call setData(22,'李四',rand()*10+10);

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

例如:

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. 函数和存储过程的区别
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值