视图

定义

视图是由一个或者多个表组成的虚拟表,其内容由查询定义。数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据还是存放在原来的表中。

作用

1、使操作简单化,可以对经常使用的查询定义一个视图,使用户不必为同样的查询操作指定条件
2、增加数据的安全性,通过视图,用户只能查询和修改指定的数据。
3、提高表的逻辑独立性,视图可以屏蔽原有表结构变化带来的影响。

创建视图

1、语句:CREATE [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}] VIEW 视图名[(列名组)] AS SELECT语句 [WITH [CASCADED|LOCAL] CHECK OPTION];
2、参数说明:
(1)ALGORITHM表示视图选择的算法,具体可选参数有三个:
UNDEFINED——MySQL自动选择所要使用的算法(由数据库决定)
MERGE——将视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分
TEMPTABLE——将视图的结果存入临时表,然后使用临时表执行语句
(2)WITH CHECK OPTION表示更新视图时要保证在该视图的权限范围内,其中还可以选择两个参数:
CASCADED——更新视图时要满足所有相关视图和表的条件
LOCAL——更新视图时,满足该视图本身定义的条件即可

视图更新

WITH CHECK OPTION指明当对视图进行insert、update、delete时,要检查进行insert、update、delete的元组是否满足视图定义中子查询中定义的条件表达式。视图更新是比较复杂的问题,因为视图不保存数据,对视图的更新最终要反映到对基本表的更新上,而有时候视图定义的映射是不可逆的。
如果视图包含下列结构中的任何一种,那么就是不可更新的:
(1)集合运算符union,union all, intersect,minus
(2)distinct关键字
(3)group by,order by, connect by或者start with
(4)子查询
(5)分组函数
(6)需要更新的列不是视图定义的
(7)具有连接查询(可以更新键值保存表的数据)
(8)违反基本表的约束条件
(9)连接视图是指基于多表连接查询创建的视图(一般不容易修改,但通用instead of触发器可以实现修改的功能)

修改视图

修改视图是指修改数据库中已存在的表的定义,当基本表的某些字段发生改变时,可以通过修改视图来保持视图和基本表之间一致。
用法:使用CREATE OR REPLACE修改视图,在视图存在的情况下可对视图进行修改,视图不在的情况下可创建视图,其基本用法和CREATE VIEW创建视图几乎一致。
举例:CREATE OR REPLACE ALGORITHM=TEMPTABLE VIEW work_view(ID,NAME) AS SELECT id,name FROM table1;

删除视图

删除视图是指删除数据库中已存在的视图,删除视图时,只能删除视图的定义,不会删除数据。
举例:DROP VIEW work_view或者DROP VIEW IF EXISTS work_view

你可能感兴趣的:(视图)