在实际工作中可能会碰到这样的需求,我经常会进行一些操作,这些操作是固定的,但是每次操作都要写几十条语句,如何解决这个问题呢?那就跟着老韩学习mysql存储过程把,学完了之后这个问题迎刃而解,Let's go。
一、概念;
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
二、存储过程优点;
1、优点;
存储过程可封装,并隐藏复杂的商业逻辑。
存储过程可以回传值,并可以接受参数。
存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。
存储过程可以用在数据检验,强制实行商业逻辑等。
执行效率高。
三、存储过程和函数的区别;
有不少初学者朋友分不清存储过程和函数,觉得函数和存储过程好像没有什么区别,
1、存储过程;
用于在数据库中完成特定的操作或者任务(如插入、删除等);
程序头部声明用procedure;
程序头部声明时不需描述;
返回类型可以使用in/out/in out 三种模式的参数;
作为一个独立个体执行(使用关键字call后面跟存储过程名字来执行);
可以通过out/in out 返回零个或多个值;
SQL语句(DML 或SELECT)中不可调用存储过程(作为一个独立个体执行可看出);
2、函数;
用于特定的数据处理(如获取今天的日期);
程序头部声明用function;
程序头部声明时要描述返回类型,而且PL/SQL块中至少要包括一个有效的return语句;
可以使用in/out/in out 三种模式的参数;
不能独立执行,必须作为表达式的一部分调用;
通过return语句返回一个值,且改值要与声明部分一致,也可以是通过out类型的参数带出的变量;
SQL语句(DML 或SELECT)中可以调用函数;
四、如何自己创建一个存储过程;
标准写法:
create procedure 存储过程名称( in/out/intout)
begin
语句(可多个语句)
end
1、无参的存储过程;
2、有参数的存储过程;
3、有返回值的存储过程;
4、有参数和返回值的存储过程;
五、执行、更新、删除存储过程
1、执行存储过程;
执行存储过程使用call来调用,如上面的四个例子中,第一个就是call del;
有参的调用方法为call ad(6);该语句会自动打印total的值,因为在存储过程中最后一个语句是select total,相当于给total的值查询了出来;
有返回值的存储过程可以使用call add(6,@sum),想得到out的值,需要再跟一个select @sum,相当于我传入了一个参数6,同时声明一个变量@sum来接收返回值,最后select @sum查询返回值的值;
有参数和返回值的存储过程调用方法为set @nub = 6;call plus(@nub),select @nub,相当于我先声明一个变量等于6,把变量传入之后进行运算,相当于给这个变量重新赋值,然后再查询这个变量的值。
2、更新存储过程;
ALTER PROCEDURE [ … ]
3、删除存储过程;
drop procedure 存储过程名字;
存储过程就讲完了,当然老韩讲的都是很简单的存储过程,带参数的存储过程老韩说心里话还没有用过,前面老韩讲了一个年假自动更新的操作大家还记得吗?就是每天24:00定时执行一个操作,判断人员入职满一年就自动累加年假天数的需求,这个其实就是存储过程和定时器联合使用的案例,存储过程还支持嵌套,就是存储过程中可以嵌套存储过程,很多时候只要逻辑上没问题都是可以的,希望大家能理解基础的,在基础上延伸,去提升。
今天的内容就到这里,没有关注的朋友可以点一下关注,你们每一次的关注、转发、收藏都是老韩持续更新的动力,谢谢观看,我们下期触发器再见。