`

视图的DML操作

阅读更多
视图是否可以提升查询速度?
所有对视图的查询,最终还是会落实到表上,查询速度上并不会有大的提升; 物化视图主要是把查询结果预计算并将结果保存成类似表的形式,再借助了查询重写的功能, 所以可以提升查询性能!

关于视图的介绍:
http://zenghao.iteye.com/blog/196803

视图INSTEAD OF触发器介绍:
http://www.iteye.com/topic/289028

对视图的DML操作:
http://danlley.iteye.com/blog/101966





视图提供了从一个表或多个表查看数据的方式。    
   
  视图实际上是一个对结果数据集的命名。它是一个SELECT语句,只要视图被引用,它就会执行。因此,视图可以被认为和物理基础表(base   table)一样拥有列和行。对于取出数据,视图可以像其他基础表一样被使用。视图是否可以被执行insert、update、delete操作,取决于它的定义。  
   
  在Oracle中,当你创建的视图来源于多个基础表或视图时,这样的视图叫做连接视图Join   Views。  
   
  例如如下语句创建的视图就是Join   View。  
   
  CREATE   VIEW   division1_staff   AS  
              SELECT   ename,   empno,   job,   dname  
              FROM   emp,   dept  
              WHERE   emp.deptno   IN   (10,   30)  
                    AND   emp.deptno   =   dept.deptno;  
   
  如果一个join   view允许进行UPDATE、   INSERT和DELETE操作,这样的视图叫做可更新的连接视图updatable   join   view。  
   
  updatable   join   view是在最外层select语句的from子句中包括一个以上的表,并且没有用WITH   READ   ONLY   子句进行限制。  
   
  updatable   join   views的规则如下:  
   
  规则  
    描述  
     
  通用规则  
    任何对join   view的INSERT、UPDATE或DELETE操作,一次只能修改一个基础表  
     
  UPDATE规则  
    join   view中所有被修改的列,必须可以对应到一个key-preserved   table中的列。   如果视图定义的时候使用了WITH   CHECK   OPTION子句,则所有连接的列和重复出现的表中的列都是不可修改的。  
     
  DELETE   规则  
    当join   view有且只有一个key-preserved   table时,才可以被删除操作。如果视图定义使用了WITH   CHECK   OPTION子句,并且key   preserved   table重复出现,则视图中的数据行是不能被删除的。  
     
  INSERT   规则  
    INSERT语句不能显式或隐式的涉及nonkey   preserved   table中的列。   如果join   view定义时使用了WITH   CHECK   OPTION子句,则INSERT操作是不允许的。  
     
   
  key-preserved   table:   表中每一个key同时也是join的结果集的key,那么这个表叫做key-preserved,因为他的Keys通过join后被保留下来了。  
   
  key-preserving的特性不是根据视图的实际结果数据决定的,而是由视图和基础表的物理结构决定的。  
   
  以上描述的是视图被创建的时候具有的inherently   modifiable特性。对于复杂的view,如果不能用DML语句(insert、update、delete)直接更改,还可以用INSTEAD   OF   triggers进行显式的更改。这些triggers叫做INSTEAD   OF   triggers,因为不像其他类型的triggers,Oracle执行trigger来代替执行出发trigger的语句。这些trigger必须定义如何直接对基础表进行UPDATE、INSERT   或   DELETE操作。  
   
  你可以正常的对视图进行UPDATE、INSERT和DELETE操作,INSTEAD   OF   trigger会在后台运行,保证对基础表的正确处理。INSTEAD   OF   triggers只能定义为每一行触发。  
   
  由此可见,对于视图的更新机制,在不同的数据库中有很大的不同。我们在数据库设计的时候,可以根据不同的数据库灵活的使用视图,但是相伴而来的一个问题就是在系统在不同数据库之间进行移植的时候会增大工作量。
分享到:
评论

相关推荐

    OCP资料051

    2. **视图DML操作的限制**: - 如果视图包含聚合函数(如`SUM`, `COUNT`等),则不能对该视图执行INSERT、UPDATE或DELETE操作。 - 如果视图中包含`GROUP BY`子句,则也不能对其执行这些操作。 **题目选项分析** ...

    JAVA笔试题一编程资料

    7. 视图DML操作:在SQL中,视图通常不允许执行DML操作,除非它们满足特定条件,如WITH CHECK OPTION。使用了WITH CHECK OPTION的视图不允许DML操作,所以正确答案是a)使用 WITH CHECK OPTION 选项创建的视图。 8. ...

    hive 表 dml 操作.zip

    在实际工作中,理解并熟练运用这些Hive的DML操作,能够有效地管理和分析大数据集。对于“产品说明.zip”和“文档.pdf”,它们可能包含了更深入的操作指南、示例代码以及最佳实践,帮助用户更好地理解和应用Hive的DML...

    ORACLE中查找定位表最后DML操作的时间小结

    但请注意,这个视图只保存了最近的修改信息,对于更长时间前的DML操作可能无法提供准确信息。 第三种方式是通过审计功能。Oracle数据库提供审计功能,可以记录所有或特定的DML操作。审计记录存储在审计表或操作系统...

    DDL与DML详解

    在Oracle中,DML操作是事务的一部分,可以使用`COMMIT`提交更改,或者使用`ROLLBACK`撤销未提交的更改。此外,`TRUNCATE`语句虽然看似DML,但实际上属于DDL,因为它涉及的是数据结构的改变,而不是单个数据记录的增...

    mysql的dml操作.docx

    以下是关于DML操作的一些详细说明: 1. **插入数据(Insert)**: 插入数据到表中通常使用`INSERT INTO`语句。例如: ```sql INSERT INTO stu (id, name, sex, age) VALUES ("001", "张三", "man", 20); ``` ...

    第5课+MaxCompute+DML操作.docx

    总的来说,MaxCompute的DML操作主要集中在数据的插入和查询,而它的设计和实现都是为了应对大数据环境下的批量处理任务,而不是实时查询和更新操作。了解这些特性对于有效利用MaxCompute进行大数据分析至关重要。在...

    oracle创建视图课件

    有些视图可能不允许DML操作,或者需要满足特定条件(如`WITH CHECK OPTION`)。 7. **视图的用途**: 视图常用于报表和数据分析,提供了一种安全机制,因为可以控制用户对数据的访问权限。同时,视图也是数据库...

    Oracle怎么根据物化视图日志快速刷新物化视图

    7. **OLD_NEW$$**: 表示物化视图日志中保存的信息是DML操作之前的值(旧值)还是DML操作之后的值(新值)。 8. **CHANGE_VECTOR$$**: 记录DML操作发生在哪些字段上。 #### 三、物化视图日志如何支持多物化视图的...

    实验四 SQL语言的DML,DDL和DCL初步

    本次实验了解DML语言的INSERT、UPDATE、DELETE对数据的操作,学会SQL Server的查询分析器中用DML语言对表中的数据进行插入、删除和修改。了解DDL语言的CREATE、DROP、ALTER对视图的操作,学会SQL Server的查询分析器...

    sql server视图详解

    - **可更新视图**:如果视图基于可更新的查询,且满足特定条件(如没有使用聚合、GROUP BY、DISTINCT等),则可以执行DML操作。但更新可能会影响多个基础表。 ### 视图的修改与删除 要修改已存在的视图,可以使用...

    数据库操作与视图

    数据操作语言(DML)包括四个主要命令:SELECT、INSERT、UPDATE和DELETE,它们用于查询、插入、更新和删除数据库中的数据。 **6.1 Transact-SQL数据查询操作** SELECT语句是SQL的核心,用于从数据库中获取所需信息...

    Oracle创建视图(View)

    3、简单视图可以实现DML操作,复杂视图不可以。 语法结构:创建视图 CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT ...

    oracleDML触发器.pptx

    - 当在视图上需要执行DML操作时,可以使用INSTEAD OF触发器,因为直接在视图上执行DML是不允许的。替代触发器会代替DML语句执行,实现对底层表的实际操作。 5. **系统触发器和用户事件触发器** - **系统触发器**...

    oracleDML触发器1.ppt

    这意味着,当试图对视图执行DML操作时,替代触发器将执行自定义的逻辑,而不是尝试在基础表上执行操作。 10.4 系统触发器 系统触发器是Oracle自动创建并触发的,它们响应数据库级别的事件,如数据库启动、用户登录...

    oracle视图的增删改查操作举例[参考].pdf

    例如,如果视图包含聚合函数或GROUP BY子句,那么通常不允许在该视图上执行DML(数据操纵语言)操作。然而,如果视图没有这些限制,并且使用了`WITH CHECK OPTION`,那么插入或更新的数据必须满足视图的查询条件。 ...

    视图上触发器 & Materialized View 物化视图

    最后,"视图DML.sql"可能包含了对视图进行INSERT、UPDATE或DELETE操作的触发器定义,这些触发器在数据修改时会触发相应的动作,比如更新关联的物化视图。 在实际应用中,理解并合理利用视图上触发器和物化视图可以...

    DB2数据库SQL语法(DDL,DML以及插入优化)

    三、资料操作 DML (Data Manipulation Language) 1. 增加资料: - `INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,...)`:插入单行数据。 - `INSERT INTO table_name (column1, column2...

Global site tag (gtag.js) - Google Analytics