什么是存储过程
存储过程是一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
注:存储过程被编译后直接保存在到了数据库,使用时可以调用直接调用,省去编译过程,他可能是多条SQL语句的集合。
存储过程的优点
- 效率高。由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。
- 减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。
- 重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。
- 方便实施企业规则。可以把企业规则的运算程序写成存储过程放入数据库服务器,这样便于集中控制,易于维护。当企业规则修改时只要修改存储过程就可以,无需修改其他应用程序。
- 安全性。参数化的存储过程可以防止SQL注入式攻击(网络传输时,只是传输的存储过程的名称和参数,SQL无法注入),数据库管理员可以向访问数据库中存储过程的应用程序授予适当的权限,而不向基础数据库表提供任何权限。
存储过程的缺点
- 调试麻烦。基本上没有较好的调试器,很多时候是用print来调试,但用这种方法调试长达数百行的存储过程简直是噩梦。
- 移植性差。不同数据库支持的语言不一样,其存储过程的编写规则也不一样,例如MySQL和SQLserver存储过程的编写有不小的差距,所以存储过程无法移植到另一类数据库。
- 不能大量使用。如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是非常难、而且代价是空前的,维护起来更麻烦。
- 无法适应数据库的切割(水平或垂直切割)。数据库切割之后,存储过程并不清楚数据存储在哪个数据库中。
关于MySQL存储过程编写的一些简单案例