MySQL存储过程/存储过程与自定义函数的区别

存储过程:

简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;

ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用;

有哪些特性:

有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能;

函数的普遍特性:模块化,封装,代码复用;

速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤;

创建一个简单的存储过程:

delimiter--修改默认结束符

其中IN表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出;

param_name表示参数名称;type表示参数的类型

delimiter //
CREATE PROCEDURE 
aff_order_pro(IN username CHAR(20) , IN pwd CHAR(32) , OUT insert_result TINYINT)
BEGIN
DECLARE user_id INT;
DECLARE user_info_id INT;
INSERT into `user`(user_name) VALUES(user_name); //添加用户表
SET user_id = LAST_INSERT_ID(); //获取上一次操作的id
INSERT INTO `user_info`(user_id,address)VALUE(user_id,address); //添加用户详情表
SET user_info_id = LAST_INSERT_ID();
if user_id and use_info_id THEN
SELECT 1 into insert_result;
ELSE
SELECT 0 INTO insert_result;
END if;
END //
delimiter ;

创建成功:


调用:

call insert_user_procedure('zhangsan','beijing',@insert_result); //调用建好的存储过程

select @insert_result as insert_result; //输出结果

存储过程修改:

ALTER语句修改存储过程只能修改存储过程的注释等无关紧要的东西,不能修改存储过程体,所以要修改存储过程,方法就是删除重建!

删除存储过程:

DROP PROCEDURE [IF EXISTS] sp_name

创建无参存储过程:

delimiter //
    CREATE PROCEDURE showTime()BEGINSELECT now();END//
delimiter ;

CALL showTime;

作用:显示当前时间,没什么实际意义

存储过程与自定义函数的区别:

    存储过程实现的过程要复杂一些,而函数的针对性较强;

    存储过程可以有多个返回值,而自定义函数只有一个返回值;

    存储过程一般独立的来执行,而函数往往是作为其他SQL语句的一部分来使用;

存储过程存在的必要性(好处):

    存储过程说白了就是把经常使用的SQL语句或业务逻辑封装起来,预编译保存在数据库中,当需要的时候从数据库中直接调用,省去了编译的过程.

    提高了运行速度;

    同时降低网络数据传输量(你觉得传一堆SQL代码快,还是传一个存储过程名字和几个参数快???)

 

 

 






猜你喜欢

转载自blog.csdn.net/weixin_41782053/article/details/80708598