`

对视图进行DML操作的介绍

阅读更多

以前只知道视图可以用来查询,最近才知道,原来视图还是可以像普通表一样进行增、删、改操作的。而我们通常用写的视图虽然仅仅只是用来进行查询,而且在建立查询视图的时候,我们从来没有考虑到将视图建立成只读格式,我意识到,事实上我们的视图是不安全的。
接下来,我将详细说明如何对视图进行数据的添加、修改和删除。
在切入主题之前,首先说明一下视图的格式定义:


 

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW YOUR_VIEW_NAME
        (COLNAME1,COLNAME2,COLNAME3,...,COLNAMEn)
AS
        [YOUR_QUERY_STATEMENTS WILL WRITE HERE !]
        [WITH CHECK OPTION [CONSTRAINTNAME constraint_name]]
        [WITH READ ONLY] 


说明:
    首先我想说一下 FORCE 与 NOFORCE 的区别,有时候你在创建视图时可能会报一个“表或视图”不存在的错误。如果选择了 FORCE 选项,不论你的 SQL 是否有问题,只要符合语法规则,Oracle 都会按照你的意图将其创建。这样你就可以在视图建立好以后再建表,或者向表中加字段。
其次就是 WITH CHECK OPTION ,这个条件一般对于查询类视图是没有太大的用途的。但是如果你要执行DML操作,那么,这个检查将会限制你只能访问被 Where 子句所限制了的记录。更或者确切的说,如果你所执行的操作影响到视图中的一条记录不再满足视图的限制条件,那么,Oracle 就不会允许你进行该操作。这样,事实上就保证了视图中数据的完整性。
最后,也是最重要,用来保证视图安全性的 WITH READ ONLY 指令。默认情况下,Oracle中的视图如果没有申明只读,理论上都可以执行DML操作。因此,如果要保证你的视图是只读的,那就应该显式声明一下。其 实,如果业务上没有在视图上执行 DML 操作的需求的话,一般建议在建立视图时都将其声明为只读格式的,这样不但保证了视图中数据不会被非法修改,而且从一定程度上还可以提升视图的执行效率。

    说了半天的闲话,我们现在开始聊聊如何对视图执行DML操作。如果是简单视图,而且没有声明 WITH READ ONLY 那你就放心大胆的执行吧,没什么不行的,为了说明问题,我们先小试牛刀。



一:简单视图执行的 DML 操作

首先,将设库中已经有Dept这张表,我们建一个视图,命名为 V_Dept ,定义过程如下:

1>用到的表定义:


 

CREATE TABLE DEPARTMENT
(
DEPARTMENTID VARCHAR2(32 BYTE)               NOT NULL,
NAME          VARCHAR2(32 BYTE)               NOT NULL,
INNERCODE     VARCHAR2(3 BYTE)                NOT NULL,
FULLNAME      VARCHAR2(32 BYTE),
STATUS        VARCHAR2(1 BYTE)                NOT NULL,
COMMENTS      VARCHAR2(100 BYTE)
) 


2>视图定义:


CREATE OR REPLACE VIEW V_Dept
    AS SELECT * FROM DEPT 


    从定义中可以看出,事实上我们这里的定义方式跟 Oracle 视图定义的标准格式还有些出入,不过没关系,Oracle 在遇到没有定义字段名的视图时他会自动将原表中的字段名称当做视图的字段名称。执行编译,系统提示view created 。OK,我们接下来对这个简单视图进行数据的修改、增加和删除。

首先我们对视图进行一次数据查询,执行如下:


 

select * from v_dept 

返回消息>>11 rows return

OK , 首先保证我们的表中有数据(没有数据的仁兄们就得自己想办法喽^^)。然后小试牛刀让我们来执行一条插入语句:


 

Insert into v_dept
   (DEPARTMENTID, NAME, INNERCODE, FULLNAME, STATUS, COMMENTS)
Values
   ('SP13618d5cWWWWW', '后勤公司', '17', '后勤服务公司', '0', '主要用于教学场地的管理');
COMMIT; 

返回消息>>1 row inserted

OK , 说明简单视图可以执行插入语句,接下来我们再试一下修改语句,我们同样还是修改刚才插入的这条记录:


修改:update v_dept set DEPARTMENTID='SP13618d5c' where DEPARTMENTID='SP13618d5cWWWWW';
删除:delete v_dept where DEPARTMENTID='SP13618d5c'


执行上面的两条语句,我们可以看到对于简单视图我们可以像对真实表一样进行 DML 操作。那么对于复杂视图呢?

二:复杂视图在有条件的情况下执行 DML 操作。

具体的限制条件如下:
1〉不允许违反约束的 DML 操作。
2〉不能将一个值添加到包含算术表达式的列中
3〉在非 key-preserved 表上不允许 DML 操作 .
4〉在包含组函数、GROUP BY 子句、ROWNUM伪列或DISTINCT关键字的视图上不允许 DML 操作。

分享到:
评论

相关推荐

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

    对视图进行增删改查操作时,需要注意一些限制。视图可以用于查询,但插入和修改操作可能会受到限制。例如,如果视图包含聚合函数或GROUP BY子句,那么通常不允许在该视图上执行DML(数据操纵语言)操作。然而,如果...

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

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

    hive 表 dml 操作.zip

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

    数据库 视图

    - **复杂视图**:数据来自多个表,可能包含函数或数据分组,不一定允许通过视图进行DML操作。 3. **视图的使用**:可以从视图中检索数据,如同从普通表中一样,可以显示整个视图的内容或特定的行和列。 4. **数据...

    DDL与DML详解

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

    SQL Server 利用触发器对多表视图进行更新的实现方法

    本示例展示了如何利用触发器来实现对多表视图的更新,具体涉及了以下几个关键知识点: 1. **触发器的类型**: - 在SQL Server中,有DML(Data Manipulation Language)触发器和DDL(Data Definition Language)...

    oracle创建视图课件

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

    索引与视图

    创建,修改,删除索引的方法 基于函数索引的特点 位图索引的特点 创建和管理视图的方法 对视图进行DML操作的方法 内嵌视图的应用特点

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

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

    sql server视图详解

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

    数据库操作与视图

    【数据库操作与视图】是关于使用Transact-SQL对数据库进行数据操作和视图创建的知识点。Transact-SQL是SQL的一个扩展,主要用于Microsoft SQL Server。数据操作语言(DML)包括四个主要命令:SELECT、INSERT、UPDATE...

    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进行大数据分析至关重要。在...

    oracleDML触发器1.ppt

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

    Oracle创建视图(View)

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

    Oracle物化视图介绍

    - **ON COMMIT**:在基表上执行DML操作并提交后立即刷新物化视图。 - **刷新方法**: - **FAST**:增量刷新,仅刷新自上次刷新以来的修改。 - **COMPLETE**:完全刷新,重新计算整个物化视图。 - **FORCE**:...

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

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

    oracleDML触发器.pptx

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

    数据库原理及应用实验指导(第三版)主编:钱雪忠 表与视图的基本操作

    这些操作展示了视图在实际应用中的便捷性,因为可以直接在视图上执行DML(数据操纵语言)操作,而无需直接操作基础表。 最后,实验通过DROP VIEW语句删除了C_P_N视图,展示了视图的可动态管理性。实验结束后,学生...

    SQL练习:数据表操作与视图管理

    其中包括创建学生子表、修改课程成绩、清除空值、构建特定条件下的视图以及对这些视图进行查询、插入、更新、删除等操作。同时涉及了用户角色的新增与权限分配回收。 适合人群:初学者到进阶水平的关系型数据库...

Global site tag (gtag.js) - Google Analytics