视图
一、 简介
- 含义:
是从数据库一个或个多个表中导出的虚拟表
2.作用:
(1)、方便用户操作
要求所见即所需,无需添加额外的查询条件,直接查看
(2)、增加数据的安全性
通过视图,用户只能查看或修改指定的数据。
(3)、提高表的独立逻辑性
原有数据表结构的变化,不会影响视图,如果修改原有列,则只需修改视图即可。
二、创建视图
- 语法:
create
[algorithm = {undefined | merge | temptable}]
view 视图名 [{属性清单}]
as select 语句
[with [cascaded|local] check option];
algorithm:选择的算法
with check option:表示更新视图时要保证在该视图的权限范围之内
undfined:表示MySQL自动选择所需使用的算法
merge:表示将视图的语句与视图的定义合并,使得视图定义的某一部分取代语句的对应部分
temptable:将视图的结果存入临时表
cascaded:表示更新视图时要满足所有相关视图和表的条件
local:表示更新视图时,要满足该视图本身的定义的条件即可
是否有权限创建?
通过SQL查询:
2.创建视图
2.1、在单表上创建视图
例子:
2.2、在多表上创建视图
例子:
三、查看视图
- desc查看
例子:
2.show table status
例子:
(employee_view1是虚拟表)
(department实体表)
3.show create view 视图名
例子:
4.在views表中查看
例子:
四、修改视图
- 通过create or replace view修改
(如果没有则创建,有则修改)
例子:
2.通过alter修改
(只能修改不能创建)
例子:
五、更新视图
创建视图:
更新视图:
查看视图(更新后):
(更新视图实际上是更新表)
注意:并非所有的视图都能更新!!!
- 视图中包含聚合函数时:
2.视图中包含union、union all、distinct、group by和having等关键字
3.常量视图
4.视图中的select中包含子查询
6.由不可更新的视图导出的视图
7.创建视图时,algorithm为temptable类型
8.视图对应的表上存在没有默认值的列,而且该列没有包含在视图里。
[最好视图仅限于查询,若要更新则要考虑全面,否则会造成更新失败]
六、 删除视图
语法:
drop view [if exists] 视图列表
例子:
判断用户是否有删除权限: