Oracle 原理: 视图,对视图进行增删改操作
Oracle的视图和SQLServer的视图基本一样。
视图,是一个虚拟的表,不会给视图分配存储空间。视图的建立需要依赖于单个或多个普通表,被依赖的普通表就成为"基表"。可以就像 用 select 语句类似,在某些表中选取字段和筛选条件,可以查询出数据,把这数据构成一张虚拟的表,这就叫视图。
视图隐藏了数据的复杂性,还可以方便用户的查询,另外,还可以隔离物理表结构改变。视图通常是用来查询的,也可以对视图进行增删改。但是在视图上进行增删改要满足一些前提: 单表视图可以进行增删改操作;在多表视图中,只能对 键保留表进行删改操作;或者 定义触发器,替换掉增删改语句。对视图进行新增、删除、修改视图的数据是会把关联的基表数据给改变的。
视图创建语句如下,也可以在视图上创建视图
CREATE[OR REPLACE] VIEW [viewName]
ASselect s.sno,s.sname,s.deptno from STUDENT s
[WITH CHECK OPTION]
[WITH Read ONLY];
例如 创建了带主键的表DEPARTMENT、STUDENT 一个多表视图VW_STU_DEPT 两个单表视图
---建立表---
CREATE TABLE DEPARTMENT(
DEPTNO CHAR(3) PRIMARY KEY,
DEPTNAME VARCHAR2(20)
);
INSERT INTO DEPARTMENT VALUES('001','中文系');
INSERT INTO DEPARTMENT VALUES('002','数学系');
INSERT INTO DEPARTMENT VALUES('003','英语系');
---建立表---
CREATE TABLE STUDENT(SNO NUMBER (6) PRIMARY KEY,SNAME VARCHAR2(10),DEPTNO CHAR(3),CONSTRAINT dep_DEPARTMENT FOREIGN KEY (DEPTNO) REFERENCES DEPARTMENT(DEPTNO)
);
INSERT INTO STUDENT VALUES(1,'张三','001');
INSERT INTO STUDENT VALUES(2,'李四','001');
INSERT INTO STUDENT VALUES(3,'王五','002');
----建立多表视图----
CREATE VIEW VW_STU_DEPT
asselect s.sno,s.sname,s.deptno dept1,d.deptno dept2,d.deptname from STUDENT s,DEPARTMENT dwhere s.deptno=d.deptnocommit;
------建立单表视图----
CREATE VIEW VW_STU1
asselect s.sno,s.sname,s.deptno from STUDENT swhere deptno='001';
------建立单表视图----
CREATE VIEW VW_STU2
asselect s.sno,s.sname,s.deptno from STUDENT swhere deptno='001'
WITH CHECK OPTION;
视图是一个虚拟表,查询视图的方法和查询表是一样的。单表视图是可以进行修改的:
我们可以看见,单表视图 VW_STU1 被成功修改,修改完后数据少一行的原因就是这个视图的筛选条件只有STUDENT表上的 字段depno值要为 '001' 才会被纳入视图 VW_STU1 。
我们Rollback 后,再对VW_STU2 视图进行相同的SQL操作
发现程序报错的原因就在于 VW_STU2,加了 WITH CHECK OPTION 条件,这个条件禁止了把视图数据减少的修改语句,但是增改操作还是可以的。 如果把视图设为只读,在创建视图的时候设定 WITH READ ONLY 就行,这样就无法对视图进行增删改操作。
键保留表就是在定义视图的时候,能够在视图上保留主键的基表
很明显,对于视图VW_STU_DEPT 中 保留了STUDENT基表上的主键,那么STUDENT就是 键保留表,视图只能对键保留表进行修改操作,不能对非键保留表进行修改操作,新增删除依旧是可以的。
无法对多表视图进行新增操作
但是可以对多表视图进行删除操作:
同时会影响到键保留表数据,但是不会影响到非键保留表数据
总而言之,在单表视图中可以进行增删查改操作,在多表视图中只能对键保留表进行 删查改 操作,无法修改普通表的。换言之,如果视图没有关联的表里面没有主键,那么就肯定无法进行增删改操作。
删除视图:
DROP VIEW [视图名];
Oracle 原理: 视图,对视图进行增删改操作相关推荐
- Oracle 11G 监控单张表的增删改操作
前言: 线上oracle数据库有张表的数据有些乱,根据应用db的log和应用的log也没有检查出来谁修改了,所以决定把这张单表做个详细的insert.update.delete监控. 一:使 ...
- Oracle数据库的增删改操作介绍
前面的博文介绍了Oracle的简单查询操作,博客地址:http://blog.csdn.net/weixin_36380516/article/details/65935879 这里再对Oracle的 ...
- python操作Oracle、PostgreSQL,MySql数据库增删改查
python操作Oracle.PostgreSQL,MySql数据库增删改查,工作中可运行案例,直接上代码,供大家参考. # _*_ coding:UTF-8 _*_#import ServerCon ...
- PHP操作MySQL数据库(连接、增删改操作)
MySQL 是跟 PHP 配套使用的最流行的开源数据库系统,我们知道MySQL是PHP的最佳搭档,下面是系统的总结PHP与MySQL联合使用的方法.主要是使用MySQL扩展,下面就通过归纳总结来提升. ...
- SqlSugar增删改操作
系列文章目录 第1章 SqlSugar-表到实体.实体到表及库表操作 第2章 SqlSugar增删改操作 第3章 SqlSugar查询操作 文章目录 系列文章目录 一.环境准备 二.增 2.1.插入单 ...
- dom对html增删改操作,6.DOM对HTML元素的增删改操作
节点的增删改操作 function createNode(){ //创建一个li元素 var li = document.createElement("li"); li.inner ...
- MySQL——数据库的增删改操作
数据库的增删改操作 数据库的增操作 数据库的增操作主要涉及数据库的增加.数据表的增加.表记录增加以及表字段增加等.数据库的增加非常简单,就是新创建一个数据库:表记录的增加指的就是新增表的数据行,可以是 ...
- 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式
一. 背景 说起EF的增删改操作,相信很多人都会说,有两种方式:① 通过方法操作 和 ② 通过状态控制. 相信你在使用EF进行删除或修改操作的时候,可能会遇到以下错误:" The obj ...
- mysql 编辑数据库内容_详解mysql数据库增删改操作
插入数据 insert into 表名(列名1,列名2,列名3) values(值1,值2,值3); insert into user(user_id,name,age) values(1,'nice ...
最新文章
- 2021中科院院士候选名单出炉:清华胡事民、南大周志华等人在列
- linux开机流程、模块管理与Loader(续)
- EntityFramework之摸索EF底层(八)
- 获取表中的某个字段名
- mac iTunes启动失败,声称iTunes文件夹被锁定
- 李秀计算机文化基础,计算机文化基础(李秀)绪论.pptx
- ie11浏览器可以下载java吗_解析:WindowsXP系统能否安装IE11浏览器
- OpenCV图像、矩阵、数组介绍
- linux 下安装fbprophet
- salesforce php,具有自动登录功能的Salesforce php REST API
- 关于JS中和||用法技巧
- bzoj 1257: [CQOI2007]余数之和sum
- 弹性碰撞次数与圆周率的关系 - 3Blue1Brown
- X Window 用户指南
- Excel 条件格式应用及原理
- 前端基础学习之css3-(border-image)实现边框图片自适应填充
- GitHub开源神器:教你如何实现 PDF 转 Word
- 还在为制作大屏苦恼?这个Smartbi神器才是你的出路
- 语义分割学习笔记(一)
- mysql没有表空间,MySQL的表空间是什么
热门文章
- 捕获分组和非捕获分组以及命名分组
- C#实现Access导入导出Excel
- Android应用性能优化之使用SparseArray替代HashMap(转)
- 微软面试题目(一) 计算两个日期之间的天数
- WP博客wordpress,robots.txt写法
- 转:[C#]获取某年指定周的开始日期和结束日期的通用方法
- HP Network Team #1: PROBLEM
- 【通信原理】【实验】实验三: 数字调制解调实验2ASK--2FSK--2PSK思路(GZHU)
- Spring IOC注入Map接口小技巧
- manjaro kde 21.2.5使用x11桌面可以正常使用搜狗输入法