小弟,开发经验不足,希望向大家问一下实际开发中,底层开发的技巧
(这里所谓的底层是指三层中的数据层,牵涉到操作数据库的代码。)
现在的困惑:见很多软件后台牵涉到数据库的代码都是使用的存储过程,
小弟也知道存储过程有它的优势,
比如:
可以把程序代码和数据库操作代码分离,这样扩展能力更好;
在编写存储过程时,数据库就会对编写的存储过程进行分析;
......
问题1:我也见到很多开发人员把存储过程的定义(或者说SQL语句)还是放到程序代码中,
而没有放到数据库中定义,这和SQL语句执行有什么差别,执行性能上又有什么差别?
问题2:是不是对于数据层的编写,尽量使用存储过程来代替基本的SQL语句?
问题3:不知道大家在开发中,对数据层操作数据库代码的编写有什么好的习惯?
分不是问题,希望和大家交流!
我先说一下我的观点:
当然存储过程性能和效率上综合来说是比较高的,
但是当是简单的SQL语句还是没有必要使用存储过程的,
对于牵涉到数据的更改:增删改时或者语句比较复杂时首先考虑使用存储过程。
而对于见到很多开发人员把存储过程的定义(或者说SQL语句)还是放到程序代码中,
而没有放到数据库中定义,这和SQL语句执行有什么差别,执行性能上又有什么差别?
这种方式,我感觉也就没有体现出来存储过程的优势,和执行SQL语句也就没有太大区别了
------解决方案--------------------------------------------------------
代码迷推荐解决方案:oracle存储过程,http://www.daimami.com/oracle-develop/177537
------解决方案--------------------------------------------------------
存储过程为主
plain sql 为辅
基本的操作:增、删、改、查(select *)用存储过程
------解决方案--------------------------------------------------------
当然存储过程性能和效率上综合来说是比较高的,
但是当是简单的SQL语句还是没有必要使用存储过程的,
对于牵涉到数据的更改:增删改时或者语句比较复杂时首先考虑使用存储过程。
同意你的这种看法,
当存储过程过多的时候,也不方便进行管理;
我一般是语句过长,或者参数太多,直接用sql语句或在传输上有影响或者是比较复杂的语句的时候才使用 存储过程。
其他的一般都是在程序中写sql语句,需要的地方传参
------解决方案--------------------------------------------------------
你用的是MS SQL SERVER吧。我赞成2楼的看法。可以在大的批处理SQL脚本,比如事务之类的使用存储过程。
对于Oracle,对表的操作,基本都通过视图的方式。然后就是数据包,比SQL SERVER相对更复杂一些。但是这个是基本的应用模式,效率相对也比较高。
当然,应用与代码分离可以做到比较安全,比如即使入侵了Web,拿到了代码,也不能知道批处理事务的底层操作。
------解决方案--------------------------------------------------------
其实,存储过程写在数据库,和写在程序中都是一样的
写在数据库中,也是通过存储过程名,去调用存储过程
写在程序中,直接到数据库中执行,感觉差不多。
简单的sql语句他很不安全,效率也低,所以尽量还是用存储过程
------解决方案--------------------------------------------------------
存储过程
sql语句执行的时候要先编译,然后执行。存储过程就是编译好了的一些sql语句。应用程序需要用的时候直接调用就可以了,所以效率会高。
存储过程介绍
存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。在ORACLE中,若干个有联系的过程可以组合在一起构成程序包。
使用存储过程有以下的优点:
* 存储过程的能力大大增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的 运算。
* 可保证数据的安全性和完整性。
# 通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。
# 通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。
* 再运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。 由于执行SQL语句的大部分工作已经完成,所以存储过程能以极快的速度执行。
* 可以降低网络的通信量。
* 使体现企业规则的运算程序放入数据库服务器中,以便:
# 集中控制。
# 当企业规则发生变化时在服务器中改变存储过程即可,无须修改任何应用程序。企业规则的特点是要经常变化,如果把体现企业规则的运算程序放入应用程序中,则当企业规则发生变化时,就需要修改应用程序工作量非常之大(修改、发行和安装应用程序)。如果把体现企业规则的 运算放入存储过程中,则当企业规则发生变化时,只要修改存储过程就可以了,应用程序无须任何变化。
数据库存储过程的实质就是部署在数据库端的一组定义代码以及SQL。
利用SQL的语言可以编写对于数据库访问的存储过程,其语法如下:
[ ]内的内容是可选项,而()内的内容是必选项,
上面这个是网上摘过来的,但是说的可能还是清楚,就是说,一般的sql语句是可以写在程序里的。而存储过程是在数据库服务端的,是经过编译后的,只是调用。再者就是如果不分所以然,全部用存储过程,这样会给服务端很大压力,试想百万用户这样大的WEB站点,要有个几成用户同时访问,那挂定了,不对,可能有钱可以做得到,呵呵
------解决方案--------------------------------------------------------
和LZ一样等待答案吧 在这块我也有相同的疑问
问题1:我也见到很多开发人员把存储过程的定义(或者说SQL语句)还是放到程序代码中,
而没有放到数据库中定义,这和SQL语句执行有什么差别,执行性能上又有什么差别?
难道还利于维护?
------解决方案--------------------------------------------------------
可能有个适中原则,可能比较模糊,可以将复杂的,性能有要求的,或是特殊的当然还是存储过程,性能是比较好的。不管咋说,用存储过程没错,只要管理适当,只要在能力,安全,性能..范围内就用吧。利还是大于弊的。
------解决方案--------------------------------------------------------
问题1:我也见到很多开发人员把存储过程的定义(或者说SQL语句)还是放到程序代码中,
而没有放到数据库中定义,这和SQL语句执行有什么差别,执行性能上又有什么差别?
存储过程的定义(或者说SQL语句)还是放到程序代码中没见过把定义也放程序里的,你说的是不是对临时表的操作或是动态执行exec()的操作?
问题2:是不是对于数据层的编写,尽量使用存储过程来代替基本的SQL语句?
得看维护交给数据库管理员还是程序员了。我做的C/S项目,除了无参数查询其余全用存储过程。
问题3:不知道大家在开发中,对数据层操作数据库代码的编写有什么好的习惯?