锁定老帖子 主题:oracle视图
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-08
最后修改:2008-11-08
一. 视图的特点 1. 集中用户感兴趣的数据. 通常用户只是对表中的某一部分数据感兴趣, 对其他的数据不是那么敏感, 所以用户通过视图就可以操 纵自己所需的数据. 对于开发人员来说, 也可以屏蔽一些数据. 2. 掩码数据库的复杂性. 通过视图机制将数据库设计的复杂性与用户屏蔽分开, 这样用户通过视图的操作就可以达到简化对数据库的复杂操作. 3. 简化用户的权限. 由于视图只是基表的逻辑表, 所以通过视图可以将视图的权限和基表权限分离. 4. 重组数据. 视图可以来自多个基表, 从而可以利用视图对数据进行进一步地分析. 二. 视图可以由以下任意一项组成: 1. 一个基表的任意子集 2. 两个或两个以上的基表的合集 3. 两个或两个以上基表的交集 4. 一个或者多个基表运算的结果集合 5. 另一个视图的子集. 三. 创建视图的基本语法: CREATE[OR REPLACE][FORCE][NOFORCE]VIEW view_name [(column_name)[,….n]] AS Select_statement [WITH CHECK OPTION[CONSTRAINT constraint_name]] [WITH READ ONLY] 说明: view_name : 视图的名字 column_name: 视图中的列名 在下列情况下 , 必须指定视图列的名称 * 由算术表达式 , 系统内置函数或者常量得到的列 * 共享同一个表名连接得到的列 * 希望视图中的列名与表中的列名不同的时候 REPLACE: 如果创建视图时, 已经存在此视图, 则重新创建此视图, 相当于覆盖 FORCE: 强制创建视图, 无论的视图所依赖的基表否存在或是否有权限创建 NOFORCE: 只有基表存在且具有创建视图权限时, 才可以创建视图 WITH CHECK OPTION 指出在视图上所进行的修改都要符合select_statement 所指定的限制条件 WITH READ ONLY 只允许查看视图 视图的定义原则:
四. 视图操作操作: 视图分为简单视图( 基于单个基表, 且不包含函数和数据分组操作 ) 和复杂视图( 基于多个基表或视图). 简单视图可以通过视图修改数据. 这些修改包括插入数据. 更新数据和删除数据. 但是对于复杂视图来说, 通过视图修改数据必须满足一定的规则. 在视图定义中没有设定READ ONLY 的前提下, 如果视图包含了下面的内容, 那么不能通过视图删除表中的数据: * 分组函数, 如SUM,AVG,MIN,MAX 等 *GROUP BY 子句 * 包含了表达式 *ROWNUM 伪列 插入数据时, 除了满足上面的条件外, 还需要保证那些没有包含在视图定义中的基表的列必须允许空值. 如果在视图定义中还包含了WITH CHECK OPTION 子句, 那么对视图的修改除了前面的那些原则外, 还必须满足指定的约束条件. 个人认为,视图利于查询,不利于修改. 1. 查询视图: 可依赖于多个基表. SELECT *FROM view_name; /* 类似于查询表数据*/ 2. 更新视图的前提: 没有使用连接函数, 集合运算和组函数. 创建视图的select 语句中没有集合函数且没有GROUP BY,ONNECT BY ,START WITH 子句及DISTINCT 关键字. 创建视图的SELECT 语句中不包含从基表列通过计算所得的列. 创建视图没有包含只读属性. 3. 插入数据 INSERT INTO view_name VALUES(); 4. 修改数据: UPDATE view_name SET … 若一个视图依赖于多个基本表, 则一次修改该视图只能修改一个基本表的数据. 5. 删除数据: Delete from view_name where … 同样, 当视图依赖多个基表时, 不能使用此语句来删除基表中的数据. 只能删除依赖一个基表的数据. 6. 修改视图定义: 修改视图的好处在于, 所有相关的权限都依然存在. 语法同创建视图相同. 7. 删除视图: DROP VIEW view_name; 只有视图所有者和具备DROP VIEW 权限的用户可以删除视图。 删除视图的定义不影响基表中的数据。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-11-08
正在学习!
和LZ有相同的想法! |
|
返回顶楼 | |
浏览 7023 次