一, 什么是存储过程:
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
二, 为什么要用存储过程呢?
存储过程真的那么重要吗,它到底有什么好处呢?
笔者认为,存储过程说白了就是一堆 SQL 的合并。中间加了点逻辑控制。
但是存储过程处理比较复杂的业务时比较实用。 比如说,一个复杂的数据操作。如果你在前台处理的话。可能会涉及到多次数据库连接。但如果你用存储过程的话。就只有一次。从响应时间上来说有优势。 也就是说存储过程可以给我们带来运行效率提高的好处。 另外,程序容易出现 BUG 不稳定,而存储过程,只要数据库不出现问题,基本上是不会出现什么问题的。也就是说从安全上讲,使用了存储过程的系统更加稳定。
数据量小的,或者和钱没关系的项目不用存储过程也可以正常运作。mysql 的存储过程还有待实际测试。如果是正式项目,建议你用 sql server 或 oracle 的存储过程。数据与数据之间打交道的话,过程会比程序来的快的多。面试官问有没有用存储,实际上就是想知道前来面试的程序员到底做过数据量大的项目没。如果是培训出来的,或者小项目小公司出来的,对存储肯定接触的少了。
所以,要想进大公司,没有丰富存储过程经验,是不行的。
那么什么时候才可以用存储?对于数据量不是很大以及业务处理不是很复杂的小项目就无需要了么? 错。
存储过程不仅仅适用于大型项目,对于中小型项目,使用存储过程也是非常有必要的。其威力和优势主要体现在: 1.
存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。 2.
当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL 语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了。 3.
存储过程可以重复使用,可减少数据库开发人员的工作量。 4.
安全性高,可设定只有某此用户才具有对指定存储过程的使用权。
5.
更强的适应性:由于存储过程对数据库的访问是通过存储过程来进行的,因此数据库开发人员可以在不改动存储过程接口的情况下对数据库进行任何改动,而这些改动不会对应用程序造成影响。
6.
布式工作:应用程序和数据库的编码工作可以分别独立进行,而不会相互压制。
一般来说,存储过程的编写比基本SQL语句复杂,编写存储过程需要更高的技能,更丰富的经验。经自已测试,一个有着十万条记录的表,通过php调用存储过程比通过PHP执行sql语句获取所有记录的时间,平均快0.4秒左右.
转载至:http://blog.csdn.net/seelye/article/details/8502660
三, 系统开发中存储过程使用的优势和劣势
优点如下:
1.执行效率高。
2.安全性能好。
3.对于一些场合非常容易实现需求。
缺点如下:
1.可维护性比较差。
2.可读性也差。
因此我个人认为在开发系统时存储过程不要滥用,用多了后期维护就比较麻烦了,有些能够在代码中实现而且对系统性能影响不大的操作就不用写在存储过程中了,而且
考虑发布容易的问题,可以考虑在服务端完成一些业务操作,使用服务代替一部分存储过程的功能。
四, 关于存储过程和业务逻辑关系的一篇文章;
http://www.cnblogs.com/wangtao_20/p/3475184.html
阿里巴巴支付宝数据库架构师冯大辉关于数据库方面见解:http://www.infoq.com/cn/presentations/fengdahui-mysql
好文章欣赏:
http://www.cnblogs.com/wangtao_20/archive/2012/05/10/2493899.html
http://www.cnblogs.com/wangtao_20/p/3304665.html
http://database.51cto.com/art/201304/391559.htm
http://www.linuxeden.com/html/news/20120413/122892.html