视图:也称虚表。对应于一条SELECT语句,结果集被赋予了一个名字,即视图名字。
视图本身并不包含任何数据,它只包含映射到基表的一个查询语句。
当修改视图的数据时,基表的数据也会被修改。
视图的作用为:1.限制数据访问权限;2.简化操作
视图的分类:
简单视图:SELECT语句基于单表,且不包含函数、表达式、分组函数,是单表的子集
复杂视图:SELECT语句基于单表,包含函数、表达式、分组函数或GROUP BY子句,必须对其中的表达式或函数定义别名。
连接视图:SELECT语句是基于多个表的
授权创建视图:GRANT CREATE VIEW TO user
其中user为被授权者
创建视图:CREATE [OR REPCLACE] VIEW view_name
AS SELECT语句
其中OR REPLACE用于修改已创建的视图
查看视图结构 :DSE view_name
删除视图:DROP VIEW view_name
视图虽然是存放在数据字典中独立存在的对象,但视图仅仅是基于表的一个查询定义,所以对视图的删除不会导致基表中数据丢失,不会影响基表数据。
查询视图与查询表的操作相同,但查询的列名必须和视图中的列名相同,不一定是原表的列名
应当尽量避免对视图进行DML操作,因为几乎不会成功。
简单视图可以执行DML操作,复杂视图不允许执行DML操作。
对视图执行DML操作时,实际上是对基表进行DML操作。必须遵循如下原则:
(1)在基表中定义了非空列,但简单视图对应的SELECT语句并未包含该非空列,则无法执行INSERT操作。
(2)如果视图中包含了函数、表达式、分组语句、DISTINCT或ROWNUM,则不允许执行DML操作。
(3)DML操作不能违反基表约束。
视图约束:
WITH CHECK OPTION表示通过视图所做的修改必须在视图可见的范围内
WTIH READ ONLY声明视图为只读模式,保证视图所对应的基表数据不会被非法修改
和视图相关的数据字典
(1)USER_OBJECTS
在数据字典USER_OBJECTS中查询所有视图的名称
SELECT object_name FROM user_objects
WHERE object_type = 'VIEW'
(2)USER_VIEWS
在数据字典USER_VIEWS中查询指定视图
SELECT text FROM user_views
WHERE view_name = ’v_emp_yuan‘
其中v_emp_yuan为指定要查询的视图名
(3)USER_UPDATE_COLUMNS
在数据字典USER_UPDATE_COLUMNS中查询视图中被修改的列
SELECT column_name,insertable,updatable,deletable
FROM user_updatable_columns
WHERE table_name = 'v_emp_yuan'
其中v_emp_yuan为指定要查询的视图名