数据库视图详解
一:视图
视图也被称为虚表,即虚拟的表,是一组数据的逻辑表示,其本质是对应一条select语句,结果集被赋予一个名字,即视图的名字。
视图本身并不包含任何数据,只包含映射到基表的一个查询语句,当基表数据发生变化时,视图数据也会随之变化。
二:创建视图的方法
create [or replace] view view_name [alias] as subquery;
视图创建后可以像操作基表一样操作视图,语法中的subquery是select查询语句,对应的表被称作基表。
三:视图的种类
根据视图所对应的子查询分为:
简单视图:基于单表查询,且不包含任何函数运算,表达式或分组函数;
复杂试图:基于单表查询,包含函数运算、表达式或分组函数;
连接视图:基于多表查询;
四:视图的作用
1:简化复杂视图。
2:限制数据访问,对基表中的其他列起到限制和保护作用。
五:授权创建视图
创建视图的DDL语句为create view,用户必须有create view系统权限,才能创建视图,若没有权限,创建视图会提示:权限不足。
管理员可通过DCL语句授予用户创建视图的权限,语句为:grant create view to tarena;
六:对视图进行dml操作
视图不包含任何数据,只是对基表数据的逻辑映射。所以,当对视图进行dml操作时,实际上是对基表数据的dml操作,对视图进行dml操作的原则是:
1:简单视图能够进行dml操作,下列情况除外:在基表中定义了非空列,但是简单视图对应的select语句没有包含这个非空列,导致这个非空列对视图不可见,
这时无法对视图进行insert操作。
2:若视图包含了函数、表达式、分组语句,distinct关键字和rowunm伪劣,不允许执行dml操作。
3:dml操作不能违反基表的约束条件。
七:查询视图
查询视图和查询表的操作一样,此时视图的列名和创建视图时的列名一致。
select * from 视图名。
八:创建具有check option约束的视图
语法如下:
create [or replace] view ciew_name [alias]
as subquery
with check option;
其中with check option短语表示,通过视图所作的dml操作,必须在视图可见范围内;
增:新增记录在视图仍可查看到;
删:删除的记录仅限于当下视图能查到的记录;
改:修改后的结果必须能通过视图查看到;
九:创建具有read onely约束的视图
语法如下:
create [or replace] view ciew_name [alias]
as subquery
with read onely;
此时对视图进行dml操作将会报错。
十:创建复杂视图
a:创建复杂视图必须为视图中的函数或者表达式定义别名;
b:复杂视图不允许dml操作,不然会报错;
c:删除视图drop view view_name,对视图的删除不会影响基表数据。