数据库-视图
Posted EbowTang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库-视图相关的知识,希望对你有一定的参考价值。
一、视图简介
视图是从一个或几个基本表(也可以是视图)导出的表。
它与基本表不同,是一个虚表。数据库只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。
所以基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。
从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。
视图只供查询。
二、视图的作用:
1、视图隐藏了底层的表结构,简化了数据访问操作,客户端不再需要知道底层表的结构及其之间的关系。
2、视图提供了一个统一访问数据的接口。(即可以允许用户通过视图访问数据的安全机制,而不授予用户直接访问底层表的权限)
3、从而加强了安全性,使用户只能看到视图所显示的数据。
4、视图还可以被嵌套,一个视图中可以嵌套另一个视图。
三、视图的小结:
参考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班','28@qq.com',SYSDATE);
INSERT INTO student VALUES(4324,'吴海峰','男',18,'高三第1班','21@qq.com',SYSDATE);
INSERT INTO student VALUES(2614,'章德正','男',20,'高三第8班','24@qq.com',SYSDATE);
INSERT INTO student VALUES(2184,'宋义','女',20,'高三第3班','98@qq.com',SYSDATE);
INSERT INTO student VALUES(9874,'张华乐','女',19,'高三第4班','12@qq.com',SYSDATE);
INSERT INTO student VALUES(1474,'黎文','女',19,'高三第4班','13@qq.com',SYSDATE);
INSERT INTO student VALUES(6574,'吉祥','男',21,'高三第7班','22@qq.com',SYSDATE);
INSERT INTO student VALUES(8174,'向玲','女',19,'高三第1班','23@qq.com',SYSDATE);
INSERT INTO student VALUES(1414,'梅田田','女',21,'高三第7班','25@qq.com',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班','51@qq.com',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条件
CSDN 社区图书馆,开张营业!
深读计划,写书评领图书福利~
以上是关于数据库-视图的主要内容,如果未能解决你的问题,请参考以下文章