Mysql视图

本文围绕MySQL视图展开,介绍视图是虚拟表,只保存查询SQL逻辑。阐述了视图的操作语法,包括创建、查询、修改和删除等。还讲解了视图检查选项,以保证数据一致性。此外,说明了视图更新的条件和视图在简化操作、保障安全、实现数据独立等方面的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

在这里插入图片描述

  • 查询

查看创建视图语句:

show create view 视图名称

在这里插入图片描述

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

select * from jakiechai;

在这里插入图片描述

  • 修改视图
    方式一
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);

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

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

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

4. 视图的更新与作用

  • 视图的更新条件

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值