Mysql视图

文章目录

    • 1. 简介
    • 2. 视图的操作语法
    • 3. 视图检查选项
    • 4. 视图的更新与作用

1. 简介

视图(view)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗来讲,视图只保存了查询SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就是落在创建这条SQL的查询语句上。

2. 视图的操作语法

  • 创建
create [or replace] view 视图名称[(列名列表)] as select语句 [with[cascaded|local] check option]

-- 创建视图
create or replace view jackiechai as select 姓名,性别 from 用户表 where 用户ID< 31;

Mysql视图_第1张图片

  • 查询

查看创建视图语句:

show create view 视图名称

在这里插入图片描述

查看视图数据(怎么样查表就怎么样查视图)

select * from jakiechai;

Mysql视图_第2张图片

  • 修改视图
    方式一
create [or replace] view 视图名称[(列名列表)] as select语句 [with[cascaded|local] check option]

方式二

alter view 视图名称[(列名列表)] as select语句 [with[cascaded|local] check option]
  • 删除视图
drop view [if exists] 视图名称 [,视图名称] .....

3. 视图检查选项

当使用with check option子句创建视图时,mysql会通过视图检查正在更改的每个行,例如插入、更新和删除,以使其符合视图定义。Mysql允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保存一致性,为了确定检查的范围,mysql提供了两个选项:cascaded和local,默认值为前者。

  • 创建一个视图不加检查选项
create or replace view jackiechai as select 姓名,年龄 from 用户表 where 年龄< 21;
  • 往视图中插入数据
insert into jackiechai VALUES('理想',30);

发现所依赖的原始表确实有数据插入

Mysql视图_第3张图片

但视图中没有该条数据,因为(30>27),这样视图就失去了其意义,为了解决这个问题可以加上前面介绍的检查选项

Mysql视图_第4张图片

create or replace view jackiechai as select 姓名,年龄 from 用户表 where 年龄< 27 with CHECK OPTION;

再次插入就会报错,因为不满足检查选项

Mysql视图_第5张图片

local选项与cascaded的区别是,使用casecaded检查选项时,所以依赖的视图也会加上casecaded选项,而local不会给所依赖的视图加上local选项

4. 视图的更新与作用

  • 视图的更新条件

要使试图可以更新,视图中的行与基础表中的行之间必须存在一对一的关系。如果视图包含以下任何一项,则视图不可以执行更新(数据)操作:

  1. 聚合函数或窗口函数
  2. Distinct
  3. Group By
  4. Having
  5. Union或者Union All
  • 视图的作用

简单
视图不仅仅可以简化用户对数据的理解,也可以简化他们的操作。哪些经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部条件。

安全
数据库可以授权,但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据

数据独立
视图可以帮助用户屏蔽真实表结构带来的影响

你可能感兴趣的:(Mysql,mysql)