GZICP.com   
 
    返回首页
    联系我们
 
 
     

SQL入门:创建视图

www.gzicp.com   2004年6月30日 23:51:33
 
  如视图中所讨论的,视
以对想要各种用户查看的信
图提供在一个或多个表中查看数
息进行限制。下列图表显示视图
据的替代方法。通过创建视图,可
和表之间的关系。

  图 2. 表和视图之间的关系                                                  
   

  在图 2中,View_A 被
TABLE_A 中的列 AC3 和 TA
限制于 TABLE_A,通过创建
限制仅存取 TABLE_A 的列 AC1
BLE_B 中的列 BC2。通过创建 V
VIEW_AB,将存取权限制于某些
和 AC2。 View_AB 允许存取
iew_A,将用户可以具有的存取权
列并创建查看数据的替代方式。

  下列语句创建 STAFF
示。
表 中 20 部门的非经理人员视

图,其中薪水和佣金不通过基表显


                                                                             
   CREATE VIEW STAFF_ONLY                        
   AS SELECT ID, NAME, DEPT
, JOB, YEARS
   FROM STAFF                              
   WHERE JOB <> 'Mgr' AND DEPT=20


  在创建视图之后,下列语句显示视图的内容:                                     

   SELECT *                                                    
   FROM STAFF_ONLY                                

  此语句产生下列结果:                                                          
   

  早些时候,我们把 STAFF 和 ORG 表
名的结果。下列语句创建可重复用于相同
连接起来产生一个列出每个部门名称及其部门经理姓
目的的视图:

                                                                             
   CREATE VIEW DEPARTMENT_MGRS              
   AS SELECT NAME, DEPTNAME              
   FROM STAFF, ORG                    
   WHERE MANAGER = ID              

  创建视图时,可以使用
表。此子句导致数据库管理
那些不符合定义的更新或插
WITH CHECK OPTION 如何
WITH CHECK OPTION 子句将附
程序验证对视图的任何更新或插
入。如果省略此子句,则不检查
起作用的详情,参考 SQL Refer
加约束添加到通过视图插入和更新
入是否符合该视图的定义,并拒绝
违反视图定义的插入和更新。有关
ence 中的 CREATE VIEW 语句。


  使用视图来处理数据                                                            
  象 SELECT 语句一样,INSERT、DELE
是一个实表一样。这些语句处理基本基表
表对它进行计算。如果未使用 WITH CHEC
原始视图定义而不在视图的重复存取中出
TE 以及 UPDATE 语句可以应用于视图,就好象视图
中的数据。因此当再次存取该视图时,使用最新的基
K OPTION,则使用视图修改的数据可能由于不再满足
现。

  下列是一个将更新应用于视图 FIXED_INCOME 的示例:               

  FIXED_INCOME 的视图定义:                                        


   CREATE VIEW FIX
ED_INCOME (LNAME, DEPART, JO
BTITLE, NEWSALARY)

   AS SELECT NA
ME, DEPT, JOB, SALARY
   FROM PERS                                
   WHERE JOB <> 'Sales' WITH CHECK OPTION



   UPDATE FIXED_INCOME                              
   SET NEWSALARY = 19000                    
   WHERE LNAME = 'Li'                          

  除了校验选项以外,先前视图中的更新等效于对基表 PERS 的更新:           

   UPDATE PERS                                              
   SET SALARY = SALARY * 1.10          
   WHERE NAME = 'Li'                            
   AND JOB <> 'Sales'


  注意:由于视图是在 CREATE VIEW FIXED_INCOME 中对约束 JOB <> 'Sales'使用 WITH CHECK OPTION 创建的,所以当 Limoges 调去做销售时不允许下列更新:


   UPDATE FIXED_INCOME                              
   SET JOBTITLE = 'Sales'                  
   WHERE LNAME = 'Limoges'                

  不能更新由表达式 SAL
列或多个这样的列,则拥有
不允许 INSERT 语句,但允
ARY + COMM or SALARY * 1.25
者不接受对这些列的更新(UPDAT
许 DELETE 语句。
定义的列。如果定义的视图包含一
E)特权。在包含这样的列的视图上


  考虑一个没有一列定义为 NOT NULL
PERS 表中,即使该视图不包含基本表 P
中看不到的列被适当地设置为空值或缺省
的 PERS 表。可以通过 FIXED_INCOME 视图将行插入
ERS 的 ID、YEARS、COMM 或 BIRTHDATE。整个视图
值。

  然而,PERS 表确实已将列 ID 定义
入行,则系统试图将空值插入在整个视图
视图中并且该列不允许空值,所以系统不
为 NOT NULL。如果尝试通过 FIXED_INCOME 视图插
中“看不到”的所有 PERS 列。由于 ID 列未包括在
允许通过该视图进行插入。

  有关修改视图的规则和
限制,参考 SQL Reference 中
的 CREATE VIEW 语句。

ChinaITLab 

最新文章
·防范SQL注入式攻击  (2004年09月05日)
·SQL injection的实现与应用  (2004年09月04日)
·SQL入门:目录视图的介绍  (2004年07月15日)
·SQL入门:大对象 (LOB)  (2004年07月15日)
·SQL入门:用户定义函数  (2004年07月15日)
·SQL入门:用户定义类型  (2004年07月15日)





 
 
Copyright © 1999-2005 GZICP.com All Rights Reserved