数据库-视图
时间:2023-12-11 20:37:02
?、视图简介
视图是从?个或?虚拟表从基本表(或视图)中导出。视图的定义只存储在系统数据字典中,而不存储视图对应的数据。视图是 原始数据库数据此外,还要查看表中的数据种?式。可以把视图看成是的个别移动窗户?个别移动窗户??个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户?个别移动窗户移动窗户?个别移动窗户?个别移动窗户?个别移动窗户移动窗户?个别移动窗户?个别移动窗户移动窗户移动窗户移动窗户?个别移动窗户?个别移动窗户?个别移动窗户移动窗户?个别移动窗户移动窗户?个别移动窗户移动窗户移动窗户?个别移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动窗户移动,感兴趣的数据可以通过它看到。视图是 从?这些表的数据存储在数据库中,从一个或多个实际表中获得。那些?于产?视图的表叫做该视图的基表。?一个视图也可以从另一个视图开始个视图中 产?。
视图的定义存在于数据库中,与此定义相关的数据不再存储在数据库中。通过视图看到的数据存储在基表中。 视图看起来像数据库的物理表,其操作与任何其他表相同。当数据通过视图修改时,实际上是在改变基表中的数据;相反 地面,基表数据的变化也会反映在基表生产的视图中。由于逻辑原因,有些视图可以修改相应的基表,有些视图不能(只能检查) 询)。
?、视图的作?
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,高三第六班,28@qq.com',SYSDATE); INSERT INTO student VALUES(4324,吴海峰,男,18,高三第一班,21@qq.com',SYSDATE); INSERT INTO student VALUES(2614,章德正,男,20,高三第八班,24@qq.com',SYSDATE); INSERT INTO student VALUES(2184,宋义,女性,20,高三第三班,98@qq.com',SYSDATE); INSERT INTO student VALUES12.@qq.com',SYSDATE); INSERT INTO student VALUES(1474,黎文,女,19,高三第四班,13@qq.com',SYSDATE); INSERT INTO student VALUES(6574,吉祥,男,21,高三第7班,22@qq.com',SYSDATE); INSERT INTO student VALUES(8174,向玲,女三第一班,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,高三第二班,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,因此,即使以下句子不符合要求v插入视图的定义(但由于对视图的定义不满,无法成功插入): 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条件