关于数据库存储过程和函数的区别,优缺点以及各家之言
摘抄观点:
- 存储过程(Stored Procedure):一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
- 存储过程一般是作为一个独立的部分来执行( EXECUTE 语句执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。
- 数据库专心做好数据存取就够了,业务都交给程序去实现!别把业务层的东西整到数据库里去。互联网基本不会用存储过程
- 因为数据库开发和优化的复杂性,DBA根本就不相信写业务逻辑的人能写出好的SQL(同时不相信ORM),业务逻辑的开发者也不想研究schema后面的水有多深,所以存储过程很好的解决了责任分工的问题。
- 存储过程开发快,升级方便,不用替换业务版本,跑下数据升级脚本就行。参加过一个大项目业务,业务逻辑大部分是oracle pl/sql存储过程实现。后来性能遇到瓶颈,热点查询app代码重写了一遍。
- 存储过程一旦调试完成通过后就能稳定运行,这与各个业务在一段时间内是相对稳定和确定是匹配的;存储过程大大地减少了业务系统与数据库的交互,一定程度降低了业务系统与数据库的耦合,例如即使业务系统与应用系统不在同一城市,对性能的影响也可控(100条SQL语句交互一次,即使延时由同城1ms增加到异地50ms,也只是增加49ms,如果交互100次,则增加4900ms)。在互联网行业,存储过程很少使用,一个重要的原因是MySQL的广泛使用,而MySQL的存储过程的功能很弱(跟商业数据库相比);另外也跟互联网行业变化快有一定的关系。
引用出处:
Mysql 存储过程和函数区别 http://www.cnblogs.com/youxin/p/3568379.html
MySQL存储过程_创建-调用-参数 http://www.cnblogs.com/geaozhang/p/6797357.html
存储过程在实际项目中用的多吗?https://www.zhihu.com/question/54408187
E-mail: huahuiyang@gmail.com
https://www.linkedin.com/in/huahuiyang/