`
fw2003
  • 浏览: 79364 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

个人对ORACLE中键保留表的理解

阅读更多
      相关资料键保留表给的定义很模糊,经过无数次验证,我对键保留表的理解是:一个复杂视图,指由多张基表组成的视图,若需要出现键保留表的话则必须保证基表中至少有一张表是有主键的!(可利用EMP表和DEPT表生成新的无约束表创建视图测试,无键保留表)
     其次,这两张表在进行关联时(可以是表连接也可以是多表查询,但一定要有关联条件!其关联条件其实相当于两表的主外键关系),如果关联条件是使用了主键的话,则外键表为键保留表。
     还是拿t2,t3这2张表来举例
      t2表内容如下:
  
     SID UNAME
-------- ---------
     100 fw
       2 sd
       3 accplz
       4 jr
       5 bigjr
       6 "Feng"
       7 FengWen
    
     t3表的内容如下:
  
   SID T3_UNAME
  ----- -----------
      1 fw
      2 sb
      3 accplz
      4 jr
      5 bigjr
      6 asda
      7 fhj

    那么创建连接视图:create or replace view t2_t3_view as select m1.sid,uname,t3_uname from t2 m1,t3 m2
where m1.sid = m2.sid;
    这时候,通过update t2_t3_view 修改表t2里的uname,或者是表t3里的t3_uname都是不行的,因为现在这2张表都是非键值保留表。那么,如果alter table t2 add constraint pk_sid primary key(sid)也就是将t2表里的sid设为主键的话,那么通过update t2_t3_view 可以修改t3_uname的值,而不能修改uname或sid的值。因为这时t3是外键表,也就是键保留表,而t2不是。那么,反过来,将t2的sid上的约束去掉,将t3的sid设为主键,那么可以通过update t2_t3_view 修改uname或sid的值,但不能修改t3_uname的值。也就是这时t2变成键保留表了,而t3不是。
    最后,如果t2,t3里的sid列都既是外键又是主键的话,那么t2,t3都会变成键保留表。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics