精华内容
下载资源
问答
  • 分享一些关于数据库中存储过程和触发器的知识,我想了想,这是很细节的技术,一般只要用了都会很快掌握其使用方法。我一般在设计数据库的时候也都会或多或少的使用存储过程和触发器,原因很简单:良好的性能,业务...

    分享一些关于数据库中存储过程和触发器的知识,我想了想,这是很细节的技术,一般只要用了都会很快掌握其使用方法。我一般在设计数据库的时候也都会或多或少的使用存储过程和触发器,原因很简单:良好的性能,业务也好实现。可是在做上次的项目的时候,由于业务很复杂,存储过程和触发器的数量均都达到上百之多,这是一件很恐怖的事情,尤其是在出了错调试维护的时候,就会想没有这些东西多好。下面我从经验角度梳理一下对存储过程和触发器的看法。

    1、触发器是特殊的存储过程。

    这句话在教科书中会经常出现,这就说明二者是有很大的联系的,我的一般理解就是触发器是一个隐藏的存储过程,因为它不需要参数,不需要显示调用,往往在你不知情的情况下已经做了很多操作。从这个角度来说,由于是隐藏的,无形中增加了系统的复杂性,非DBA人员理解起来数据库就会有困难,因为它不执行根本感觉不到它的存在。再有,涉及到复杂的逻辑的时候,触发器的嵌套是避免不了的,如果再涉及几个存储过程,再加上事务等等,很容易出现死锁现象,再调试的时候也会经常性的从一个触发器转到另外一个,级联关系的不断追溯,很容易使人头大。其实,从性能上,触发器并没有提升多少性能,只是从代码上来说,可能在coding的时候很容易实现业务,所以我的观点是:摒弃触发器!触发器的功能基本都可以用存储过程来实现。

    2、存储过程优点很多,可以经常使用

    可以封装数据逻辑和业务规则,以便用户可以仅通过开发人员和数据库管理员打算使用的方式访问数据和对象。

    验证所有用户输入的参数化存储过程可用于阻止 SQL 注入攻击。 如果使用动态 SQL,请确保将命令参数化,并绝对不能将参数值直接包括在查询字符串中。

    可禁止即席查询和数据修改。 这样将阻止用户恶意或无意中损坏数据或执行查询,以避免降低服务器或网络的性能。

    可以在过程代码中处理错误,而无需将错误直接传递给客户端应用程序。 这样可防止返回错误消息,以避免其可能有助于探测攻击。 在服务器上记录错误并对其进行处理。

    存储过程只能编写一次,可由很多应用程序访问。

    客户端应用程序不需要知道有关基础数据结构的任何信息。 只要更改不影响参数列表或返回的数据类型,就可以更改存储过程代码,而无需在客户端应用程序中进行更改。

    存储过程可通过将多个操作组合到一个过程调用中来减少网络通讯。

    安全性好—可以访问执行存储过程而不必拥有直接操作基础表的权限

    减少网络通信流—存储过程可以包含多条SQL语句,但只要用一条语句来执行该存储过程,从而减少了客户端应用程序对服务器的调用次数和长度

    快速执行—存储过程在第一次执行时进行语法检查和编译,编译好的版本存储在高速缓存中,用于再次调用

    保证一致性—如果用户只通过存储过程修改数据,则可以消除偶然修改带来的问题减少操作人员和编程人员的错误—由于传递信息少,因此执行复杂任务更容易,不易出现SQL错误

    3、考虑移植性,存储过程的致命伤

    如果一个系统过多的使用了存储过程,那系统的业务逻辑过于依赖数据库,这样就会给系统额外的增加一层数据库中的业务逻辑层,如果开发的时候用的sql server,后来发现数据量过大,需要提高性能移植到oracle或者mysql,这样就会很麻烦,相当于把存储过程重写一遍,这是不能忍受的。我们平时在做项目的时候,往往一个功能在客户端实现起来很费劲,在服务端很容易就可以实现,这样好多人就会选择在服务端做,却为以后留下隐患。在分析项目的需求的时候,一定要考虑性能问题,多久有可能会升级, 如果数据量很小,几十年用sql server都没问题,那就可以多用存储过程;但是数据量有可能会逐渐累积成千万条甚至更多,就不得不考虑系统的可移植性,这时候尽量不要用存储过程,全部代码控制。

    4、存储过程的代码可复用性差。

    面向对象的思维在存储过程这毫无用武之地,两个很相似的功能在也需要两个存储过程,因为他们是互相独立的,可以互相调用,但是不能继承等面向对象的操作,这也就增加了代码量。

    总结:

    缺点:

    1、可移植性是存储过程和触发器最大的缺点。

    2、占用服务器端太多的资源,对服务器造成很大的压力

    3、不能做DDL。

    4、触发器排错困难,而且数据容易造成不一致,后期维护不方便。

    优点:

    1、预编译,已优化,效率较高。避免了SQL语句在网络传输然后再解释的低效率。

    2、存储过程可以重复使用,减少开发人员的工作量。

    3、业务逻辑封装性好,修改方便。

    4、安全。不会有SQL语句注入问题存在。

    综上:在一般的小系统(逻辑简单)中,存储过程和触发器可以多用,毕竟ms设计的,可以很大程度上提升性能;在复杂的系统中,建议不用触发器,少用存储过程。

    展开全文
  • 分享一些关于数据库中存储过程和触发器的知识,我想了想,这是很细节的技术,一般只要用了都会很快掌握其使用方法。我一般在设计数据库的时候也都会或多或少的使用存储过程和触发器,原因很简单:良好的性能,业务...

    分享一些关于数据库中存储过程和触发器的知识,我想了想,这是很细节的技术,一般只要用了都会很快掌握其使用方法。我一般在设计数据库的时候也都会或多或少的使用存储过程和触发器,原因很简单:良好的性能,业务也好实现。可是在做上次的项目的时候,由于业务很复杂,存储过程和触发器的数量均都达到上百之多,这是一件很恐怖的事情,尤其是在出了错调试维护的时候,就会想没有这些东西多好。下面我从经验角度梳理一下对存储过程和触发器的看法。

           1、触发器是特殊的存储过程。

             这句话在教科书中会经常出现,这就说明二者是有很大的联系的,我的一般理解就是触发器是一个隐藏的存储过程,因为它不需要参数,不需要显示调用,往往在你不知情的情况下已经做了很多操作。从这个角度来说,由于是隐藏的,无形中增加了系统的复杂性,非DBA人员理解起来数据库就会有困难,因为它不执行根本感觉不到它的存在。再有,涉及到复杂的逻辑的时候,触发器的嵌套是避免不了的,如果再涉及几个存储过程,再加上事务等等,很容易出现死锁现象,再调试的时候也会经常性的从一个触发器转到另外一个,级联关系的不断追溯,很容易使人头大。其实,从性能上,触发器并没有提升多少性能,只是从代码上来说,可能在coding的时候很容易实现业务,所以我的观点是:摒弃触发器!触发器的功能基本都可以用存储过程来实现。

           2、存储过程优点很多,可以经常使用

     

    • 可以封装数据逻辑和业务规则,以便用户可以仅通过开发人员和数据库管理员打算使用的方式访问数据和对象。
    • 验证所有用户输入的参数化存储过程可用于阻止 SQL 注入攻击。 如果使用动态 SQL,请确保将命令参数化,并绝对不能将参数值直接包括在查询字符串中。
    • 可禁止即席查询和数据修改。 这样将阻止用户恶意或无意中损坏数据或执行查询,以避免降低服务器或网络的性能。
    • 可以在过程代码中处理错误,而无需将错误直接传递给客户端应用程序。 这样可防止返回错误消息,以避免其可能有助于探测攻击。 在服务器上记录错误并对其进行处理。
    • 存储过程只能编写一次,可由很多应用程序访问。
    • 客户端应用程序不需要知道有关基础数据结构的任何信息。 只要更改不影响参数列表或返回的数据类型,就可以更改存储过程代码,而无需在客户端应用程序中进行更改。
    • 存储过程可通过将多个操作组合到一个过程调用中来减少网络通讯。
    • 安全性好—可以访问执行存储过程而不必拥有直接操作基础表的权限
    • 减少网络通信流—存储过程可以包含多条SQL语句,但只要用一条语句来执行该存储过程,从而减少了客户端应用程序对服务器的调用次数和长度
    • 快速执行—存储过程在第一次执行时进行语法检查和编译,编译好的版本存储在高速缓存中,用于再次调用
    • 保证一致性—如果用户只通过存储过程修改数据,则可以消除偶然修改带来的问题减少操作人员和编程人员的错误—由于传递信息少,因此执行复杂任务更容易,不易出现SQL错误

     

     

            3、考虑移植性,存储过程的致命伤
            如果一个系统过多的使用了存储过程,那系统的业务逻辑过于依赖数据库,这样就会给系统额外的增加一层数据库中的业务逻辑层,如果开发的时候用的sql server,后来发现数据量过大,需要提高性能移植到oracle或者mysql,这样就会很麻烦,相当于把存储过程重写一遍,这是不能忍受的。我们平时在做项目的时候,往往一个功能在客户端实现起来很费劲,在服务端很容易就可以实现,这样好多人就会选择在服务端做,却为以后留下隐患。在分析项目的需求的时候,一定要考虑性能问题,多久有可能会升级, 如果数据量很小,几十年用sql server都没问题,那就可以多用存储过程;但是数据量有可能会逐渐累积成千万条甚至更多,就不得不考虑系统的可移植性,这时候尽量不要用存储过程,全部代码控制。
            4、存储过程的代码可复用性差。
            面向对象的思维在存储过程这毫无用武之地,两个很相似的功能在也需要两个存储过程,因为他们是互相独立的,可以互相调用,但是不能继承等面向对象的操作,这也就增加了代码量。
     
      总结:

      缺点:
      1、可移植性是存储过程和触发器最大的缺点。
      2、占用服务器端太多的资源,对服务器造成很大的压力
      3、不能做DDL。
      4、触发器排错困难,而且数据容易造成不一致,后期维护不方便。
      优点:
      1、预编译,已优化,效率较高。避免了SQL语句在网络传输然后再解释的低效率。
      2、存储过程可以重复使用,减少开发人员的工作量。
      3、业务逻辑封装性好,修改方便。
      4、安全。不会有SQL语句注入问题存在。

          综上:在一般的小系统(逻辑简单)中,存储过程和触发器可以多用,毕竟ms设计的,可以很大程度上提升性能;在复杂的系统中,建议不用触发器,少用存储过程。

    转载于:https://www.cnblogs.com/wangbiaowangxin/p/4910866.html

    展开全文
  • 存储过程和触发器的取舍问题(优缺点分析)2013年07月24日 16:50:22 Jesse621 阅读数:12975 标签: 存储过程触发器优缺点 更多个人分类: 【Database】 由于要给同学分享一些关于数据库中存储过程和触发器的知识,...

    存储过程和触发器的取舍问题(优缺点分析)
    2013年07月24日 16:50:22 Jesse621 阅读数:12975 标签: 存储过程触发器优缺点 更多
    个人分类: 【Database】
    由于要给同学分享一些关于数据库中存储过程和触发器的知识,我想了想,这是很细节的技术,一般只要用了都会很快掌握其使用方法。经过这么多年,我一般在设计数据库的时候也都会或多或少的使用存储过程和触发器,原因很简单:良好的性能,业务也好实现。可是在做上次的项目的时候,由于业务很复杂,存储过程和触发器的数量均都达到上百之多,这是一件很恐怖的事情,尤其是在出了错调试维护的时候,就会想没有这些东西多好。下面我从经验角度梳理一下对存储过程和触发器的看法。
    1、触发器是特殊的存储过程。
    这句话在教科书中会经常出现,这就说明二者是有很大的联系的,我的一般理解就是触发器是一个隐藏的存储过程,因为它不需要参数,不需要显示调用,往往在你不知情的情况下已经做了很多操作。从这个角度来说,由于是隐藏的,无形中增加了系统的复杂性,非DBA人员理解起来数据库就会有困难,因为它不执行根本感觉不到它的存在。再有,涉及到复杂的逻辑的时候,触发器的嵌套是避免不了的,如果再涉及几个存储过程,再加上事务等等,很容易出现死锁现象,再调试的时候也会经常性的从一个触发器转到另外一个,级联关系的不断追溯,很容易使人头大。其实,从性能上,触发器并没有提升多少性能,只是从代码上来说,可能在coding的时候很容易实现业务,所以我的观点是:摒弃触发器!触发器的功能基本都可以用存储过程来实现。
    2、存储过程优点很多,可以经常使用
    可以封装数据逻辑和业务规则,以便用户可以仅通过开发人员和数据库管理员打算使用的方式访问数据和对象。
    验证所有用户输入的参数化存储过程可用于阻止 SQL 注入攻击。 如果使用动态 SQL,请确保将命令参数化,并绝对不能将参数值直接包括在查询字符串中。
    可禁止即席查询和数据修改。 这样将阻止用户恶意或无意中损坏数据或执行查询,以避免降低服务器或网络的性能。
    可以在过程代码中处理错误,而无需将错误直接传递给客户端应用程序。 这样可防止返回错误消息,以避免其可能有助于探测攻击。 在服务器上记录错误并对其进行处理。
    存储过程只能编写一次,可由很多应用程序访问。
    客户端应用程序不需要知道有关基础数据结构的任何信息。 只要更改不影响参数列表或返回的数据类型,就可以更改存储过程代码,而无需在客户端应用程序中进行更改。
    存储过程可通过将多个操作组合到一个过程调用中来减少网络通讯。
    安全性好—可以访问执行存储过程而不必拥有直接操作基础表的权限
    减少网络通信流—存储过程可以包含多条SQL语句,但只要用一条语句来执行该存储过程,从而减少了客户端应用程序对服务器的调用次数和长度
    快速执行—存储过程在第一次执行时进行语法检查和编译,编译好的版本存储在高速缓存中,用于再次调用
    保证一致性—如果用户只通过存储过程修改数据,则可以消除偶然修改带来的问题减少操作人员和编程人员的错误—由于传递信息少,因此执行复杂任务更容易,不易出现SQL错误
    3、考虑移植性,存储过程的致命伤
    如果一个系统过多的使用了存储过程,那系统的业务逻辑过于依赖数据库,这样就会给系统额外的增加一层数据库中的业务逻辑层,如果开发的时候用的sql server,后来发现数据量过大,需要提高性能移植到oracle或者mysql,这样就会很麻烦,相当于把存储过程重写一遍,这是不能忍受的。我们平时在做项目的时候,往往一个功能在客户端实现起来很费劲,在服务端很容易就可以实现,这样好多人就会选择在服务端做,却为以后留下隐患。在分析项目的需求的时候,一定要考虑性能问题,多久有可能会升级, 如果数据量很小,几十年用sql server都没问题,那就可以多用存储过程;但是数据量有可能会逐渐累积成千万条甚至更多,就不得不考虑系统的可移植性,这时候尽量不要用存储过程,全部代码控制。
    4、存储过程的代码可复用性差。
    面向对象的思维在存储过程这毫无用武之地,两个很相似的功能在也需要两个存储过程,因为他们是互相独立的,可以互相调用,但是不能继承等面向对象的操作,这也就增加了代码量。

    综上:在一般的小系统(逻辑简单)中,存储过程和触发器可以多用,毕竟ms设计的,可以很大程度上提升性能;在复杂的系统中,建议不用触发器,少用存储过程。

    转载于:https://www.cnblogs.com/buffercache/p/10236967.html

    展开全文
  • 转自:https://www.2cto.com/database/201208/146199.html索引、视图、游标、存储过程和触发器的理解 1、索引 1-1、索引的概述 我们把一个表中的一列或者多列和列中元素所在表中记录的物理地址组合成一个新的表。...

    转自:https://www.2cto.com/database/201208/146199.html

    索引、视图、游标、存储过程和触发器的理解

     

    1、索引 

          1-1、索引的概述 

                   我们把一个表中的一列或者多列和列中元素所在表中记录的物理地址组合成一个新的表。这个表的记录大致为列的内容和该列所在记录的物理地址。 

          1-2、索引的优缺点   

                   优点:大大加快了对源表的执行速度,我们对索引表的检索就可以实现对源表的检索。到底快在哪里?举例说明:我们通过T-SQL语句查询源表中的一条记录,在没有索引表的时候,计算机首先把整个源表从外存加载到内存,然后再一一匹配,从外存加载到内存耗时是非常的大;在有索引的时候,计算机首先加载索引表,然后匹配,找到后,取出它的物理地址,此时,再从外存中加载大表中的该记录,这种方法,人看的时候麻烦,但计算机可能就不那么认为(具体还要看源表记录的长度和数量) 

                   缺点:索引表需要占物理空间;当对源表操作时,也要维护索引表,是维护的任务加重了。

     

    2、视图 

           2-1、视图的概述

                    视图由一张表或多张表的列数据组成的一张虚拟表,所谓虚拟表,就是该整体表在硬盘上不存在,其实,我们创建一个视图,实际上是创建了一个经过包装了的Select语句,在这里我们称为A,创建视图,就是我们往硬盘存放了A,我们调用该视图的时候,系统就会自动执行一遍A,然后,我们看见的就是一张表了。(这张表数据的改变时,基表变不变,那要看具体情况了,可以说明的是,我们可以通过虚拟表达到改变基表数据的目的) 

          2-2、视图的优缺点 

                   优点:视图可以限制我们对表中一些数据的访问,增加了数据的安全性;减少了重复写入T-SQL语句。 

                   缺点:复杂的视图一般不能修改内容;能修改的视图,也需要经过变化使该操作应用到基表中。

      www.2cto.com  

    3、游标 

          3-1、游标的概述

                   数据库管理系统为了对数据的管理更加高效,采用的是整块数据进行管理操作,这个管理方式对于数据库管理系统来说是非常的好的,但是,这种管理方式对于应用程序来说不好,因为我应用程序对于操作管理的数据是很少的,而且针对性也强,根据应用程序的这些特点,我们为了使应用程序更加的高效,我们创建了游标,游标就是为了完成对数据集中的数据经行更小单位的操作,也就是对记录集中的数据的操作是按一条一条记录经行的,所以呢,游标是由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。游标是由管理多数据到少数据,操作不确定数据到确定性数据,对数据顶对性弱到针对性强的一种产物。 

         3-2、游标的优缺点

                  优点:应用程序可以应用游标对数据集经行指定行的操作。

                  缺点:使用不当会使运行效率更低。

     

    4、存储过程 

               4-1、存储过程的概述 

                        存储过程就是一个SQL语句集,当然,这个语句集可以完成特定的功能,存储过程建立后,就先会经过编译,然后,存放在硬盘上。

               4-2、存储过程的优缺点   www.2cto.com  

                        优点:一次编译,多次执行,使用户不用多次的书写相同的SQL语句了,同时这些SQL语句也不用一直先编译在执行了,节省了时间。

                        缺点:简单应用换可以,复杂的时候应用,就是变的复杂。

     

    5、触发器 

          5-1、触发器的概述 

                   触发器就是特殊的存储过程,特殊在,触发器不需要通过人为(例:在程序中调用)的操作来启动它,触发器的启动是由事件(删除、更新等)的执行来自动启动的。

          5-2、触发器的优缺点 

                  优点:是数据的安全性更强,例:通过触发器可以取消删除数据的操作。

                  缺点:维护数据的时候变得有些复杂。



    展开全文
  • 缺点:1、可移植性是存储过程和触发器最大的缺点。2、占用服务器端太多资源,对服务器造成很大压力3、不能做DDL。4、触发器排错困难,而且数据容易造成不一致,后期维护不方便。优点:1、预编译,已优化,效率较...
  • 由于要给同学分享一些关于数据库中存储过程和触发器的知识,我想了想,这是很细节的技术,一般只要用了都会很快掌握其使用方法。经过这么多年,我一般在设计数据库的时候也都会或多或少的使用存储过程和触发器,原因...
  • 1、可移植性是存储过程和触发器最大的缺点。 2、占用服务器端太多资源,对服务器造成很大压力 3、不能做DDL。 4、触发器排错困难,而且数据容易造成不一致,后期维护不方便。 ---------------------------...
  • 触发器和存储过程的优缺点

    千次阅读 2013-11-21 10:31:08
    1、可移植性是存储过程和触发器最大的缺点。 2、占用服务器端太多资源,对服务器造成很大压力 3、不能做DDL。 4、触发器排错困难,而且数据容易造成不一致,后期维护不方便。 优点: 1、预编译,已...
  • 有哪些优缺点? 「存储过程」,就是一些编译好了SQL语句,这些SQL语句代码像一个方法一样实现一些功能(对单表或多表增删改查),然后给这些代码块取一个名字,在用到这个功能时候调用即可。 「优点:」 存储...
  • 1、可移植性是存储过程和触发器最大的缺点。 2、占用服务器端太多资源,对服务器造成很大压力 3、不能做DDL。 4、触发器排错困难,而且数据容易造成不一致,后期维护不方便。 优点: 1、预编译,已...
  • 索引、视图、游标、存储过程和触发器的理解 1、索引 1-1、索引的概述 我们把一个表中的一列或者多列和列中元素所在表中记录的物理地址组合成一个新的表。这个表的记录大致为列的内容和该列所在记录的物理地址...
  • mysql触发器优缺点简介

    千次阅读 2018-07-12 17:24:49
    SQL触发器是存储在数据库目录... 触发器和存储过程之间的主要区别在于,当对表执行数据修改事件时,会自动调用触发器,而存储过程必须要明确地调用。完事我们来看下SQL触发器的优点:SQL触发器提供了检查数据完整性...
  • 简述使用存储过程有哪些优缺点? 优点: (1)减少网络流量。 (2)提高系统性能。 (3)安全性高。 (4)可重用性好。 (5)课自动完成需要预先执行任务。 缺点: 移植性较差,增加数据库...
  • 触发器和存储过程之间的主要区别在于,当对表执行数据修改事件时,会自动调用触发器,而存储过程必须要明确地调用。1, SQL触发器的优点SQL触发器提供了检查数据完整性的替代方法。SQL触发器可以捕获数据库层中业务...
  •  1、索引   1-1、索引的概述   我们把一个表中的一列或者多列列中元素所在表... 1-2、索引的优缺点 www.2cto.com    优点:大大加快了对源表的执行速度,我们对索引表的检索就可以实现对源表的检索。
  • 存储过程是一些sql语句控制语句组成被封装起来过程,它驻留在数据库中,可以被客户应用程序通过存储过程名字调用,也可以从另一个存储过程触发器调用。 它参数可以被传递返回,与应用程序中函数过程...
  • 1、索引   1-1、索引的概述   我们把一个表中的一列或者多列... 1-2、索引的优缺点   优点:大大加快了对源表的执行速度,我们对索引表的检索就可以实现对源表的检索。到底快在哪里?举例说明:我们通过T-SQ
  • 1、索引   1-1、索引的概述   我们把一个表中的一列或者多列列中... 1-2、索引的优缺点   优点:大大加快了对源表的执行速度,我们对索引表的检索就可以实现对源表的检索。到底快在哪里?举例说明:
  • MySQL的存储过程优缺点 1、存储过程概念 存储过程是一些sql语句控制语句组成被封装起来过程,它驻留在数据库中,可以被客户应用程序通过存储过程名字调用,也可以从另一个存储过程触发器调用。 它参数可以...
  • 存储过程概念存储过程是一些sql语句控制语句组成被封装起来过程,它驻留在数据库中,可以被客户应用程序通过存储过程名字调用,也可以从另一个存储过程触发器调用。它参数可以被传递返回,与应用程序中...

空空如也

空空如也

1 2 3 4 5 6
收藏数 109
精华内容 43
关键字:

存储过程和触发器的优缺点