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

导读:本篇文章讲解 存储函数与存储过程的区别,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1. 读写权限不同

存储函数:设计之初的目的是只读的(但是实际并没有严格限制)
存储过程:可读可写

存储函数的读写权限这里要特殊说明一下:
创建存储函数的时候后,必须声明函数读写权限,且只能在DETERMINISTIC, NO SQL, or READS SQL DATA中选择。这三者的含义为确定性、无SQL语句、只对数据库进行读操作。
如果没有声明读写权限,就会报下面的错误:

ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

如果想不报错,除了声明参数还有一个办法,执行SET GLOBAL log_bin_trust_routine_creators = 1;命令来禁止掉对SUPER权限的要求。

注意:虽然存储函数的声明要求是只读的,但是却不会对函数中的语句进行检查,所有我们仍然可以在存储函数中进行写数据库的操作。

2. 返回不同

  • 存储函数:必须有返回值
  • 存储过程:返回值可有可无,通过OUT参数返回

3. 调用方式不同

  • 存储函数:只能在sql语句中调用,比如:select function();
  • 存储过程:只能单独调用,比如:call procedure();

总结

  • 存储函数:是为了计算一些东西
  • 存储过程:是一些sql语句的集合

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/13297.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!