视图,存储过程和触发器

来源:互联网 发布:知乎客户端无法登陆 编辑:程序博客网 时间:2024/05/21 06:26

 

视图是将一些数据有机的结合起来放到一起,方便展示给有浏览权限的用户查阅。
存储过程是执行一组sql语句,将一个复杂的操作过程放到一个sp里面,由数据库服务器处理,提高运行的效率和保证数据的完整性。
触发器,是一个表数据的变更后通过触发器来修改与之相关联的其他表的数据,保证数据的一致性。


视图是一张虚拟表,通过它可以浏览你感兴趣的部分或全部内容。
存储过程是由一组SQL语句和可选控制流语句的预编译集合。
触发器是一种强制业务规则,确保数据的完整性和唯一性。


其实完全可以不用,用了也是有利有弊。我们公司的业务就没有用任何存储过程之类的东西。
经常察看使用的功能,用视图,存储过程感觉会比较方便。
另外就是权限的问题,
视图可以方便权限的控制,比如你只想给用户看某些表某些字段的权限;
存储过程也可以控制权限,可以使任何修改只能调用存储过程来实现。
至于触发器,完全可以自己写程序来实现。


视图是保存在數據庫中的選擇查詢﹐相當于一個從一個或多個數據表中派生出來的虛擬表﹐是用戶以查看數據庫中數據的一種方式。通过它可以浏览你感兴趣的部分或全部内容。
触发器是種特殊類型的存儲過程﹐與表格緊密相連。當用戶修改表中的數據時﹐它自動執行。
存储过程是由一组SQL语句和可选控制流语句的预编译集合。
它被划分成部件片段。檢查引用數據庫中其它對象(表﹐视图等)﹐確保引用的對象是存在的。
一旦分解完成然后就編譯。存儲過程首次運行時﹐讀出查詢計划并完成編譯過程計划。然后運行。
節約了每次運行存儲過程的語法檢查﹐分解和編譯查詢樹的時間。

 

你为什么要使用数据库而不使用文件作你的数据服务?因为数据库很方便,但是它方便在什么地方呢?因为你可以使用视图,触发器,存储过程来解决很多的问题,这就是为什么?我估计你还得好好想想

当你能灵活应用的时候就不会问这个问题了
sql是第四代语言,比面向对象的第三代语言要高一个档次,可以为我们编程减少很多工作量
我觉得存储过程和触发器都是在服务段执行的批语句(可能这样说有点不恰当),但是触发器故名思意是被触发执行的,这点由数据库可以保证它被适时地被触发,而存储过程是需要你主动去调用的。两者不可互相替代!

触发器是在实际对数据进行更新的过程当中,触发某一事件!
而存储过程在实际调用!
一般尽量不要使用触发器!


视图,存储过程,触发器的优点:


视图的优点:

提高数据安全性,可以不让用户看到表中的某个字段。比如password,你只给他们执行视图的权限,不给执行表的权限,他们就无法查看全部数据。

还有可以建立一个视图,内容包括两个表,更新的时候只需要指定ID,而不用管它来自哪个表,对应表中的数据就会自动更新。

存储过程的优点:

包括视图的所有优点,还可以让不懂数据库的人也能也用数据库,还有就是方便程序计设,比如我负责前台程序设计,你负责写存储过程,我不用管你是怎么写,最后只接调用,我们分工明确,我也不需要懂你所懂的,这为用不懂语言和不同专业的人在一起合作提供了良好的平台。提高开发效率。

触发器的优点:


保证数据的正确性和逻辑,比如订单表中新增一条数据,对应在库存表中会减少一个产品一样。
还有保证数据的安全性,比如当用户删除表A,我们可以判断他是否为Admin组的用户,如果不是,就会给出错误的提示,并将事务回滚。

减少编写代码,改善代码的易读性,处理并发问题。
方便数据库的维护或查看。


数据库中存储过程和视图的区别

存储过程  
  存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是SQL语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。  
   
  存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。    
   
  可以出于任何使用SQL语句的目的来使用存储过程,它具有以下优点:    
   
  可以在单个存储过程中执行一系列SQL语句。  
   
  可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。  
   
  存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快。   
 
  存储过程的功能取决于数据库所提供的功能。

 

视图  
  视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。  
   
  对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。如果有几台不同的服务器分别存储组织中不同地区的数据,而您需要将这些服务器上相似结构的数据组合起来,这种方式就很有用。  
   
  通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。