(十四)存储过程

目录

1. 什么是存储过程

2.存储过程与函数的区别 

3.存储过程和触发器相同与区别:


1. 什么是存储过程

  存储是一段预编译的SQL语句(再次执行时不需要重检查语法、不需要重编译), 只需要创建一次,就可以被多次调用,一个存储过程通常用于完成一段业务逻辑,例如报名,交班费,订单入库等。

      存储过程说白了就是把经常使用的SQL语句或业务逻辑封装起来,预编译保存在数据库中,当需要的时候从数据库中直接调用,省去了编译的过程.。提高了运行速度; 同时降低网络数据传输量(你觉得传一堆SQL代码快,还是传一个存储过程名字和几个参数快?

       如果需要执行多次SQL,那么存储过程的速度更快。 存储过程可以供外部程序调用, 如java程序。

什么是存储过程:(https://blog.csdn.net/waicyuyan/article/details/9040621

存储过程实例:https://blog.csdn.net/yanluandai1985/article/details/83656374

DELIMITER //  -- 定义存储过程结束符号为//
CREATE PROCEDURE getStuById(IN stuId INT(11),OUT stuName VARCHAR(255),OUT stuAge INT(11)) 
-- 定义输入与输出参数
SQL SECURITY DEFINER  -- DEFINER指明只有定义此SQL的人才能执行,MySQL默认也是这个
BEGIN
   SELECT name ,age INTO stuName , stuAge FROM t_student WHERE id = stuId; 
   -- 分号加,select into 选...放到...中
END // -- 结束符要加
DELIMITER ;  -- 重新定义存储过程结束符为分号

 

语法: CREATE PROCEDURE sp_name(定义输入输出参数,格式in name INT(11)) BEGIN SQL语句;  END

IN 表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出的参数。sp_name为存储过程的名字。

如果此存储过程没有任何输入输出,其实就没什么意义了,但是sp_name()的括号不能省略。

2.存储过程与函数的区别 

      存储过程是一段预编译sql语句,通常为了完成一段业务逻辑,这些操作经常调用,所以集合成存储过程可重复用,且不用再编译,运行速度加快。函数通常专注于一个具体的功能,被其他程序调用才可以,存储过程不需要被调用,call一下自己执行。存储过程一般是作为一个独立的部分来执行( EXECUTE 语句执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。

①存储过程是面向业务层面,函数是棉线一个具体功能(为其他程序服务)

②函数需要其他语句中的调用函数调用(select),存储过程不需要是自己执行的)

③返回值

      存储函数只能通过return语句返回单个值或者表对象(单列)(类似变成语言中的函数)。
      存储过程不能用return,但是可以使用多个out参数返回多个值

④声明不同:

          申明: procedure 申明: function

异同:https://blog.csdn.net/t_1007/article/details/88076795 

3.存储过程和触发器相同与区别:

(1)触发器与存储过程可以说是非常相似,可以说是一种变种的存储过程,触发器和存储过程一样都是SQL语句,通常通过创建触发器来强制实现不同表中的逻辑相关数据的引用完整性和一致性。由于用户不能绕过触发器,所以可以用它来强制实施复杂的业务规则,以确保数据的完整性。

(2)触发器不同于存储过程,触发器主要是通过事件执行触发而被执行的,而存储过程可以通过存储过程名称名字而直接调用。当对某一表进行诸如UPDATE、INSERT、DELETE这些操作时,SQLSERVER就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合这些SQL语句所定义的规则。

4. 存储过程的有优缺点

  优点: 存储过程是一个预编译的SQL语句, 执行效率高,放在数据库中,直接调用,减少网络通信,可重复使用
  缺点: 移植性差

https://www.cnblogs.com/zjulanjian/p/10526856.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值