相关资料键保留表给的定义很模糊,经过无数次验证,我对键保留表的理解是:一个复杂视图,指由多张基表组成的视图,若需要出现键保留表的话则必须保证基表中至少有一张表是有主键的!(可利用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都会变成键保留表。
分享到:
相关推荐
Oracle 临时表功能介绍: Oracle中的临时表是全局的,需要在数据库设计时创建完成,而不是程序使用时。每个登陆用户都使用这一个相同的临时表,但互相之间看不到彼此的数据,也就是说临时表是会话独立的。
在Oracle数据库中,如何查找,定位一张表最后一次的DML操作的时间呢? 方式有三种,不过都有一些局限性,下面简单的解析、总结一下。 1:使用ORA_ROWSCN伪列获取表最后的DML时间 ORA_ROWSCN伪列是Oracle 10g开始...
备份oracle数据库并保留指定天数(day)的备份文件(rar)
Oracle存储过程中使用临时表 会话级临时表 事务级临时表
Oracle中聚簇表的使用,详细的介绍了oracle中聚簇表的创建及使用。
oracle创建分区表
Oracle在线建立超大表的索引,为在线生产系统某核心大表建立索引
这是因为ORACLE只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于多表连接查询..数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性...
深入理解Oracle Exadata
删除Oracle数据库中的表
oracle锁表查询oracle锁表查询oracle锁表查询oracle锁表查询
资源名称:深入理解Oracle RAC 12c内容简介:《深入理解Oracle RAC 12c》介绍了Oracle RAC 12c技术的方方面面,涵盖了与RAC技术相关的集群件知识、数据库知识、存储知识、网络知识,并在基于RAC的应用软件设计、优化...
OracleOracle查询死锁表OracleOracle查询死锁表OracleOracle查询死锁表
1、行级触发器不支持 ...所以想要触发器对自身表数据做修该,则用行级触发器得到 :new 和 :old对象中的相关数据,然后将这样的数据保存到 package中,然后在语句级触发期中调用 package包中保存的数据,进行更新操作
oracle scott用户的表
Oracle自定义函数返回一张表。主要用于生成一张等时间间隔的表数据。
本文详细介绍和阐述了 Oracle 用户(user)和表空间(tablespace)的概念和使用方法等内容,并对用户和表空间使用过程中的注意事项、关键知识点等进行了重点标注和详尽解析,以便于读者进行深入学习和理解。...
oracle系统表查询,详细讲解各个系统表的使用
基于eclipse 和oracle对数据库中表的操作 ,其中有日期插件
使用oracle数据库时修改表结构,创建表空间等等