当前位置:网站首页>数据库-视图
数据库-视图
2022-06-26 14:52:00 【EbowTang】
⼀、视图简介
视图是从⼀个或⼏个基本表(或视图)中导出的虚拟的表。在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。视图是 原始数据库数据的⼀种变换,是查看表中数据的另外⼀种⽅式。可以将视图看成是⼀个移动的窗⼝,通过它可以看到感兴趣的数据。视图是 从⼀个或多个实际表中获得的,这些表的数据存放在数据库中。那些⽤于产⽣视图的表叫做该视图的基表。⼀个视图也可以从另⼀个视图中 产⽣。
视图的定义存在数据库中,与此定义相关的数据并没有再存⼀份于数据库中。通过视图看到的数据存放在基表中。 视图看上去⾮常像数据库的物理表,对它的操作同任何其它的表⼀样。当通过视图修改数据时,实际上是在改变基表中的数据;相反 地,基表数据的改变也会⾃动反映在由基表产⽣的视图中。由于逻辑上的原因,有些视图可以修改对应的基表,⽽有些则不能(仅仅能查 询)。
⼆、视图的作⽤
1. 简化了操作,
把经常使⽤的数据定义为视图 我们在使⽤查询时,在很多时候我们要使⽤聚合函数,同时还要显⽰其它字段的信息,可能还会需要关联到其它表,这时写的语句可能 会很长,如果这个动作频繁发⽣的话,我们可以创建视图,这以后,我们只需要select * from view就可以啦,这样很⽅便。
2. 安全性,
⽤户只能查询和修改能看到的数据。 因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以将基表中重要的字段信息,可以不通过视图给⽤户,视图是 动态的数据的集合,数据是随着基表的更新⽽更新。同时,⽤户对视图不可以随意的更改和删除,可以保证数据的安全性。
3. 逻辑上的独⽴性,
屏蔽了真实表的结构带来的影响。 视图可以使应⽤程序和数据库表在⼀定程度上独⽴。如果没有视图,应⽤⼀定是建⽴在表上的。有了视图之后,程序可以建⽴在视图之 上,从⽽程序与数据库表被视图分割开来。
三、缺点
1. 性能差
数据库必须把视图查询转化成对基本表的查询,如果这个视图是由⼀个复杂的多表查询所定义,那么,即使是视图的⼀个简单查询,数 据库也要把它变成⼀个复杂的结合体,需要花费⼀定的时间。
2. 修改限制
当⽤户试图修改视图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的视图来说,这是很⽅便的,但是, 对于⽐较复杂的试图,可能是不可修改的。
四、视图的小结:
参考oracle和KES总结

在KES数据库上的视图SQL测试代码:
--------------------------------------------------
--视图的测试与验证
--------------------------------------------------
--创建实验表
CREATE TABLE student (
stu_nmb number(8),
stu_name char(8) not null,
gender varchar2(2),
age number(2), --检查约束
class varchar2 (40) not null,
email varchar2 (30),
sdate DATE,
constraint con_nmb primary key (stu_nmb),
constraint con_check check ( gender in ('男','女')),
constraint ch_age CHECK (age BETWEEN 18 AND 30), --检查约束
constraint uk_student_email UNIQUE (email)
);
--首先插入,正确
INSERT INTO student VALUES(2314,'张德田','男',19,'高三第6班','[email protected]',SYSDATE);
INSERT INTO student VALUES(4324,'吴海峰','男',18,'高三第1班','[email protected]',SYSDATE);
INSERT INTO student VALUES(2614,'章德正','男',20,'高三第8班','[email protected]',SYSDATE);
INSERT INTO student VALUES(2184,'宋义','女',20,'高三第3班','[email protected]',SYSDATE);
INSERT INTO student VALUES(9874,'张华乐','女',19,'高三第4班','[email protected]',SYSDATE);
INSERT INTO student VALUES(1474,'黎文','女',19,'高三第4班','[email protected]',SYSDATE);
INSERT INTO student VALUES(6574,'吉祥','男',21,'高三第7班','[email protected]',SYSDATE);
INSERT INTO student VALUES(8174,'向玲','女',19,'高三第1班','[email protected]',SYSDATE);
INSERT INTO student VALUES(1414,'梅田田','女',21,'高三第7班','[email protected]',SYSDATE);
--公共语句
drop table if exists student; --oracle没有这个语法,mysql和KES存在
select * from student;
--删除视图
drop view age_view;
drop view age_view1;
drop view avg_answer_view;
drop view test1;
--select简单语句
select stu_nmb,stu_name
from student
where age > 20 and gender = '男';
--创建上述语句的一个的简单视图
create force view age_view as
select stu_nmb,stu_name
from student
where age > 20 and gender = '男'
with local check option ;--可选,限定DML语句操作必须满足一定条件
create force view age_view1 as
select stu_nmb,stu_name
from student
where age > 19 and gender = '女'
with local check option ;--可选,限定DML语句操作必须满足一定条件
--查看视图,和select返回的一样的效果,视图使用方法和表
select * from age_view;
select * from age_view1;
--通过视图执行DML语句,限制很多,其中最重要的是插入的数据必须能被视图查询获取到,否则无法插入
--比如下列语句能插入成功,因为是男性且大于20岁
INSERT INTO age_view VALUES(7261,'王萌','男',21,'高三第2班','[email protected]',SYSDATE);
--创建无效视图,没有FORCE参数,将报错,有该参数的情况下,只要没有语法错误将
create force view novalid_view as
select *
from no_has_testtable --该表不存在,如果后续该表被创建出来,则
drop view novalid_view;
select * from novalid_view;
--测试视图子句
--------------------------------
---公共测试语句
drop view v2; --删除视图
drop view v1; --删除视图
drop view v3; --删除视图
drop table t1;
truncate t1; --清空表
--创建表
CREATE TABLE t1 (
c INT
);
--v1视图,必须大于10(没有WITH CHECK OPTION约束限制)
CREATE OR REPLACE VIEW v1 AS
select c
from t1
where c > 10;
--v2视图,必须大于20
--基于v1创建或替换v2视图,且有WITH local CHECK OPTION;约束
CREATE OR REPLACE VIEW v2 AS
select c
from v1 --基于视图v1
where c < 20 --比如插入12,将无法插入
WITH local CHECK OPTION;
--基于v1创建或替换v3视图,且有WITH CHECK OPTION;约束(CASCADED)
--v3视图,必须小于20
CREATE OR REPLACE VIEW v3 AS
select c
from v1
where c < 20 --比如插入1,将无法插入
WITH CHECK OPTION;
--因为没有指定WITH CHECK OPTION,所以以下语句即使不符合v1视图的定义也执行插入(但是由于不满定义的视图,所以无法插入成功):
INSERT INTO v1(c) VALUES (5); --不满足当前视图,KES会执行但是不会报错,但是无法插入成功
--执行成功
INSERT INTO v1(c) VALUES (12);--满足当前视图,可以成功
--测试v2的LOCAL限制
INSERT INTO v2(c) VALUES (5); --满足当前视图,可以成功
INSERT INTO v2(c) VALUES (12); --满足当前视图,可以成功
INSERT INTO v2(c) VALUES (20); --不满足当前视图,无法成功
--测试v3的CASCADED限制
INSERT INTO v3(c) VALUES (50); ---不成功,不满足当前表的where条件
INSERT INTO v3(c) VALUES (1); --不成功,违反了v1的where条件
边栏推荐
- Mathematical modeling of war preparation 30 regression analysis 2
- 集群中命令的执行过程
- R语言glm函数逻辑回归模型、使用epiDisplay包logistic.display函数获取模型汇总统计信息(自变量初始和调整后的优势比及置信区间,回归系数的Wald检验的p值)、结果保存到csv
- Login authentication service
- The JVM outputs GC logs, causing the JVM to get stuck. I am stupid
- vue中缓存页面 keepAlive使用
- View触摸分析
- Practical website recommendations worth collecting for College Students
- Principle of TCP reset attack
- Unity C# 网络学习(十)——UnityWebRequest(一)
猜你喜欢

This is the graceful file system mounting method, which is effective through personal testing

重磅白皮书发布,华为持续引领未来智慧园区建设新模式

Deploy the flask environment using the pagoda panel

How to mount cloud disks in ECS

【云原生】 ”人人皆可“ 编程的无代码 iVX 编辑器

15 bs对象.节点名称.节点名称.string 获取嵌套节点内容

Get the intersection union difference set of two dataframes

Smoothing data using convolution

MySQL master-slave replication and read-write separation

View touch analysis
随机推荐
R language uses GLM function to build Poisson logarithm linear regression model, processes three-dimensional contingency table data to build saturation model, uses step function to realize stepwise re
View touch analysis
详解C语言编程题:任意三条边能否构成三角形,输出该三角形面积并判断其类型
Deploy the flask environment using the pagoda panel
Unity C# 网络学习(九)——WWWFrom
JVM 输出 GC 日志导致 JVM 卡住,我 TM 人傻了
NVIDIA SMI error
R language dplyr package bind_ The rows function merges the rows of the two dataframes vertically. The final number of rows is the sum of the rows of the original two dataframes (combine data frames)
集群中命令的执行过程
Flex & bison start
Is it safe for flush to register and open an account? Is there any risk?
MHA high availability coordination and failover
Solution to the upper limit of TeamViewer display devices
Login authentication service
TS common data types summary
Deployment of kubernetes' controller
【使用yarn运行报错】The engine “node“ is incompatible with this module.
php文件上传00截断
Is it safe to open a stock account with the account manager online??
R language uses the aggregate function of epidisplay package to split numerical variables into different subsets based on factor variables, calculate the summary statistics of each subset, and use agg