多表视图的定义:当视图的数据源只有一张数据表,则该视图为单表视图;当视图的数据源是多张数据表,则该视图为多表视图。 可更新视图的定义:在绝大多数人的概念中,视图是只读的,不允许修改。ORACLE 8i以上版本,单表视图如果没有设定With Read Only,则该视图是可以更新的,对视图的操作将直接写入的数据表中。 那么,如果视图的数据源是多张数据表,而多表视图如果实现可更新视图,则可以大大提高编码的效率。 ### 多表可更新视图的实现 #### 一、多表视图与可更新视图的概念 在数据库管理系统(DBMS)中,视图是一种虚拟表,它并不实际存储数据,而是根据定义的查询结果动态生成。视图能够简化复杂的查询操作,提供数据的安全性和隐藏敏感数据的能力。根据视图所依赖的基础表数量的不同,视图可以分为单表视图和多表视图。 - **单表视图**:视图的数据源只有一张数据表,这种视图通常用于简化查询或提供对基础表的一种特定视角。 - **多表视图**:视图的数据源是多张数据表,这种视图通常用于跨多个表进行联合查询,以便于进行更复杂的数据分析。 #### 二、可更新视图的定义及实现 在传统的概念中,视图被认为是只读的,不支持更新操作。但在Oracle 8i及以上版本中,如果视图没有显式地被指定为`WITH READ ONLY`,则该视图默认是可以被更新的。对于单表视图来说,这意味着可以直接通过视图来修改基础表中的数据。 对于多表视图而言,实现可更新性更为复杂,因为涉及到多个基础表的数据一致性问题。为了实现多表视图的可更新性,通常采用以下方法: 1. **使用INSTEAD OF触发器**:通过创建一个特定类型的触发器(INSTEAD OF触发器),可以在视图上执行INSERT、UPDATE或DELETE操作时自动转换为对基础表的操作,从而实现对多表视图的更新。 #### 三、多表可更新视图的具体实现步骤 下面详细介绍如何在Oracle数据库中实现多表可更新视图。 1. **创建基础表**: ```sql -- 创建基础表t1 CREATE TABLE t1 ( t11 numeric(28), t12 varchar2(20) ); -- 创建基础表t2 CREATE TABLE t2 ( t11 numeric(28), t22 varchar2(20) ); ``` 2. **创建视图**: ```sql -- 创建多表视图v CREATE OR REPLACE VIEW v AS SELECT t1.t11 AS f1, t1.t12 AS f2, t2.t22 AS f3 FROM t1, t2 WHERE t1.t11 = t2.t11; ``` 此处创建了一个名为`v`的多表视图,它从`t1`和`t2`两张表中选择数据,并基于两表中的`t11`字段进行连接。 3. **创建INSTEAD OF触发器**: ```sql -- 创建触发器trg_v CREATE OR REPLACE TRIGGER trg_v INSTEAD OF INSERT OR UPDATE OR DELETE ON v FOR EACH ROW BEGIN IF INSERTING THEN INSERT INTO t1 (t11, t12) VALUES (:NEW.f1, :NEW.f2); INSERT INTO t2 (t11, t22) VALUES (:NEW.f1, :NEW.f3); ELSIF UPDATING THEN UPDATE t1 SET t11 = :NEW.f1, t12 = :NEW.f2 WHERE t11 = :NEW.f1; UPDATE t2 SET t11 = :NEW.f1, t22 = :NEW.f3 WHERE t11 = :NEW.f1; ELSIF DELETING THEN DELETE FROM t1 WHERE t11 = :NEW.f1; DELETE FROM t2 WHERE t11 = :NEW.f1; END IF; END; ``` 这个触发器实现了对多表视图`v`的插入、更新和删除操作。当通过视图执行这些操作时,触发器会自动将操作转化为对基础表`t1`和`t2`的操作,确保数据的一致性和完整性。 #### 四、注意事项与应用场景 - **性能考虑**:虽然使用INSTEAD OF触发器可以实现多表视图的可更新性,但在大量数据更新的情况下可能会导致性能下降。因此,在设计时应考虑到这一点,并考虑是否有必要使用可更新的多表视图。 - **安全性**:通过视图进行数据更新时,需要注意权限控制,防止未经授权的用户对数据进行修改。 - **应用场景**:多表可更新视图在以下场景中非常有用: - 需要简化跨表数据更新的复杂度。 - 在多表之间保持数据一致性非常重要。 - 提供一个统一的接口,让用户通过视图进行数据操作,而不必关心底层数据的分布情况。 通过以上的实现步骤,我们可以看到,多表可更新视图在Oracle数据库中的实现并不复杂,但需要仔细规划和测试,以确保数据的完整性和应用的稳定性。


























- djfol2019-05-09谢谢分享,学习中。

- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 网络多媒体应用设计原型.ppt
- 肯德基网络营销案例分析.doc
- 煤矿供电系统安全技术措施.doc
- 协同管理软件ioas标准版实施培训方案.doc
- 最新项目管理2019年终工作总结1.doc
- 仪表与自动化专业技术测试试题有答案精讲.doc
- Sonar-Facebook-移动应用开发资源
- C51-单片机开发资源
- 网络营销推广方案及策略.doc
- 制定网络营销策划案.pptx
- SK-MWD(GR)-无线随钻测量系统-软件使用说明书.doc
- 建设工程项目管理试题及答案.doc
- 小学信息技术-《认识计算机》教学设计学情分析教材分析课后反思.docx
- sumocarla自动驾驶联合仿真:安装配置、教程、开发及驾驶模拟强化学习轨迹预测与规划 高效版
- 配电自动化系统复习.pptx
- 数据库电子商城课程设计报告.doc


