函数和存储过程

转自:https://zhuanlan.zhihu.com/p/28491458
http://www.cnblogs.com/chenpi/p/5136483.html
http://www.cnblogs.com/kissdodog/p/4168721.html
https://www.cnblogs.com/geaozhang/p/6817698.html
https://zhuanlan.zhihu.com/p/31839179

函数

创建:
CREATE FUNCTION function_name 
RETURNS
{STRING|INTEGER|REAL|DECIMAL}
routine_body

删除:
DROP FUNCTION [if exists] function_name
存储过程
创建:
CREATE [DEFINER={user|CURRENT_USER}] PROCEDURE sp_name([IN|OUT|INOUT] param_name type [, ..])
[characterisitic ..] routine_body

修改:
ALTER PROCEDURE sp_name [characteristic..]
COMMENT 'string'
|LANGUAGE SQL
|{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
|SQL SECURITY { DEFINER | INVOKER }
修改语句只能改变存储过程的特征,不能修改过程的参数以及过程体。如果想做这样的修改,必须先使用DROP PROCEDURE 删除过程,然后使用and CREATE PROCEDURE重建过程。

删除:
DROP PROCEDIRE [IF EXISTS] sp_name
存储过程弊端:
不同数据库,语法差别很大,移植困难,换了数据库,需要重新编写;
不好管理,把过多业务逻辑写在存储过程不好维护,不利于分层管理,容易混乱,一般存储过程适用于个别对性能要求较高的业务,其它的必要性不是很大;

区别
存储过程实现的功能更复杂;函数的针对性更强;
存储过程可返回多个参数;函数只能返回一个值或表对象
存储过程一般独立执行(EXEC执行);函数可通过SQL语句调用
函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少

当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。 
Procedure cache中保存的是执行计划 (execution plan) ,当编译好之后就执行procedure cache中的execution plan,之后SQL SERVER会根据每个execution plan的实际情况来考虑是否要在cache中保存这个plan,评判的标准一个是这个execution plan可能被使用的频率;其次是生成这个plan的代价,也就是编译的耗时。保存在cache中的plan在下次执行时就不用再编译了。

存储过程和触发器
存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用


MySQL存储引擎:将数据以不同的技术存储在文件(内存)中。每种存储引擎存储机制、索引技巧、锁定水平不同,最终提供广泛且不同的功能


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值