MySQL----视图

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: MySQL----视图

1. 视图介绍

视图(View)是一种虚拟存在的表。

视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。

通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。

所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。

2. 语法

2.1 创建

CREATE [OR REPLACE] VIEW 视图名称[(列名列表)] 
AS SELECT语句 
[ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
create or replace view user_v_1
as
    select id, name
    from tb_user
    where id<=10;

2.2 查询

查看创建视图语句:

SHOW CREATE VIEW 视图名称;
show create view user_v_1;

查看视图数据:

SELECT * FROM 视图名称 ...... ;
select * from user_v_1;

2.3 修改

方式一:

CREATE [OR REPLACE] VIEW 视图名称[(列名列表)] 
AS SELECT语句 
[ WITH [ CASCADED | LOCAL ] CHECK OPTION ];
create or replace view user_v_1
as
    select id, name, phone
    from tb_user
    where id<10;
select * from mydatabase.user_v_1;

方式二:

ALTER VIEW 视图名称[(列名列表)] 
AS SELECT语句 
[ WITH [ CASCADED | LOCAL ] CHECK OPTION ];
alter view user_v_1
as
    select id, name
    from tb_user
    where id<=10;
select * from mydatabase.user_v_1;

2.4 删除

DROP VIEW [IF EXISTS] 视图名称 [,视图名称] ...;
drop view mydatabase.user_v_1;

3. 通过视图来插入、更新数据

create or replace view stu_v_1
as
    select Sno, Sname, Sage
    from student
    where Sage>=20;
select * from stu_v_1;

insert into stu_v_1
values ( '201212122', 'zs', 21 );
insert into stu_v_1
values ( '201212123', 'ls', 12 );

执行上述的SQL,我们会发现,数据都是可以成功插入。

因为我们在创建视图的时候,指定的条件为 Sage>=20, Sage为12的数据,是不符合条件的,所以没有查询出来,但是这条数据确实是已经成功的插入到了基表中。

如果我们定义视图时,如果指定了条件,然后我们在插入、修改、删除数据时,是否可以做到必须满足条件才能操作,否则不能够操作呢? 答案是可以的,这就需要借助于视图的检查选项了。

4. 检查选项

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

4.1 CASCADED

级联。

比如,v2视图是基于v1视图的,如果在v2视图创建的时候指定了检查选项为 cascaded,但是v1视图

创建时未指定检查选项。 则在执行检查时,不仅会检查v2,还会级联检查v2的关联视图v1。

4.2 LOCAL

本地。

比如,v2视图是基于v1视图的,如果在v2视图创建的时候指定了检查选项为 local ,但是v1视图创建时未指定检查选项。 则在执行检查时,只会检查v2,不会检查v2的关联视图v1。

5. 视图的更新

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

  1. 聚合函数或窗口函数(SUM()、 MIN()、 MAX()、 COUNT()等)
  2. DISTINCT
  3. GROUP BY
  4. HAVING
  5. UNION 或者 UNION ALL
create or replace view stu_v_2
as
    select count(*)
    from student
    where Sage>=20;
select * from stu_v_2;

上述的视图中,就只有一个单行单列的数据,如果我们对这个视图进行更新或插入的,将会报错。

insert into stu_v_2
values ( 22 );

6. 视图作用

  1. 简单
    视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
  2. 安全
    数据库可以授权,但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据。
  3. 数据独立
    视图可帮助用户屏蔽真实表结构变化带来的影响。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 关系型数据库 MySQL
MySQL中如何创建一个视图
MySQL中如何创建一个视图
29 0
|
19天前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(2)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
19天前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(1)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
2月前
|
存储 SQL 关系型数据库
mysql 高阶语句 与视图
mysql 高阶语句 与视图
|
2月前
|
关系型数据库 MySQL 索引
【MySQL】视图 -- 详解
【MySQL】视图 -- 详解
|
12天前
|
存储 SQL 关系型数据库
MySQL数据库进阶第四篇(视图/存储过程/触发器)
MySQL数据库进阶第四篇(视图/存储过程/触发器)
|
17天前
|
安全 关系型数据库 MySQL
MYSQL--视图操作
MYSQL--视图操作
|
16天前
|
SQL 关系型数据库 MySQL
MySQL数据库练习——视图
MySQL数据库练习——视图
16 1
|
19天前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(3)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
2天前
|
存储 关系型数据库 分布式数据库
PolarDB产品使用问题之在将RDS迁移到PolarDB后,原先由root用户创建的视图、存储过程等是否可以继续使用的
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。