需求背景:
显示程序有时候出现问题导致数据错误的时候,如果比较紧急,我们可以写一个存储来快速修复这块的数据,然后再去修改程序
存储过程相对于java程序开发来说,不是很方便阅读和维护,所以不建议在程序中去调用存储过程来做一些业务操作
当mysql内部的函数无法满足我们的需求时,我们可以自定义函数来满足
本文内容:
详解存储过程的使用、详解自定以函数的使用
准备数据:
create table you_l(
id int not null primary key comment '编号',
age smallint unsigned not null comment '年龄',
name varchar(16) not null comment '姓名'
)comment '用户表';
存储过程:
概念:
一组预编译好的sql语句集合,理解为成批处理语句。
好处:
提高代码重用性、简化操作、减少编译次数并且减少和数据库服务器连接的次数,提高了效率
创建存储过程:
create procedure 存储过程名([参数模式] 参数名 参数类型)
begin
存储过程体
end
参数模式有3种:
in:该参数可以作为输入,也就是该参数需要调用者传入值
out:该参数可以作为输出,也就是说该参数可以作为返回值
inout:该参数即可以作为输入也可以作为输出
参数模式默认为 in
一个存储过程可以有多个输入,多个输出、多个输入输出参数
删除存储过程:
drop procedure if exists 存储过程名
调用存储过程:
call 存储过程名
查看存储过程:
show create procedure 存储过程名称
修改存储过程:
只能删除已经存在,再创建一个新的
创建一个不带参的存储过程:
->delimiter ; //重新设置结束符为 ;
->call yu_name(); //调用存储过程
创建一个带参的存储过程:
创建一个带out参数的存储过程:
创建带inout的存储过程:
函数:
概念:
一组预编译好的sql语句集合,理解成批量处理语句。和java方法相似,但是必须又返回值。
创建函数:(参数是可选的,返回值是必须的)
create function 方法名(参数名 参数类型)
returns 返回值类型
begin
函数体
end
调用函数:
select 方法名;
删除函数:
drop function if exists 方法名
查看函数详细:
show create function 函数名
实例:
实例1:创建无参函数
->delimiter $
->create function ee()
-> returns int
-> begin
-> declare max_id int default 0;
-> select max(id) into max_id from yu_l;
-> return max_id;
-> end $
->delimiter ;
->select ee();
实例2:创建有参函数
->delimiter $
->create function cc(v_name varchar(16))
-> returns int
-> begin
-> declare r_id int;
-> select id into r_id from yu_l where name=v_name;
-> return r_id;
-> end $
->delimiter ;
-> select cc(name) from yu_l;