【Mysql】视图

本文涉及的产品
RDSClaw,2核4GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 【Mysql】视图

Mysql的视图

屏幕快照 2022-05-16 下午12.44.54.png

视图优点

1.它简化了操作。此时我们完全不用关心视图是怎么处理数据的,我们只需要知道如何使用这个结果集即可,视图相当于一个中间层。

2.它更加安全。比如我们可以让用户有权去访问某个视图,但是不能访问原表,这样就可以起到保护原表中某些数据的作用。

我们之后会接触到管理权限,权限是无法细致到某一个列的,通过视图,则很容易实现。

3.降低耦合。假如我们以后要修改原表的结构,那么我们可以通过修改视图的定义即可,而不用修改应用程序,对访问者是不会造成影响的,一般来说,这样代价会更小。

视图缺点

表结构修改则需要手动修改视图

视图IUD

表是可以更新数据的,这里的更新,指的是”增删改”,但是对于视图来说 不一定。

update user set email = 00 where id = 12;

select * from user_view;

– 删除视图

DROP VIEW user_view_2;

以下是视图不可更新的情况


包含聚合函数、distinct、group by、having、union、union all。

常量视图。

select 包含子查询。

包含连接操作。

from 一个不能更新的视图。

where 子句的子查询引用了 from 子句中的表。

自个测试…


更新视图的注意点

如下数据


创建一个新的视图


create view user_view_2 as select id,user_name,password,email,status from user where status = 0;

select * from user_view_2;

现在如果给这个视图新增数据 status = 1;


insert into user_view_2(id, user_name, password, email, status) values (30, ‘221’, ‘12’, ‘12’, 1);

select * from user_view_2;

select * from user;

你会发现我们可以向该视图插入数据,它不满足本视图的要求,但是数据可以插入基表了。在前面也有所讲过该操作有点类似于PHP的代码封装的操作。我们把该视图的操作转化为PHP 方法就是如下


<?php function select(){ if ($status == 0) { return "sql: select id,user_name,password,email,status from `user` where status = 0"; } }?>

但是有些时候的我们不希望这种情况的发生,如果不满足视图的条件就不插入,就和PHP方法的条件判断一样


<?php if ($status == 0) { return 'insert'; } ?>

with check option


对于上面的表 t2,我们想:是否可以创建一个视图,它只允许修改满足本视图要求的数据,而对于不满足本视图要求的数据操作, 统统拒绝呢?

答案是肯定的。那就需要 with check option 了,不过该修饰符还有更加深一步的权限机制。

首先我们还是利用上一步的 t2,我们创建一个视图 v3,它的创建

DROP VIEW user_view_2;

create view user_view_2 as select id,user_name,password,email,status from user where status = 0 with check option;

insert into user_view_2(id, user_name, password, email, status) values (31, ‘221’, ‘12’, ‘12’, 1);

错误信息

[Err] 1369 - CHECK OPTION failed ‘community.user_view_2’


这里可以理解为 with check option 的作用就是多了一个 check 的功能,即检查的功能,也就是说插入的数据必须满足该视图的条件,才允许被操作。

视图应用&好处

提高了重用性,就像一个函数 如果要频繁获取user的name和goods的name。就应该使用以下sql语言。示例:

 select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id;


但有了视图就不一样了,创建视图other。示例


     create view other as select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id;


创建好视图后,就可以这样获取user的name和goods的name。示例:


     select * from other;


以上sql语句,就能获取user的name和goods的name了。


对数据库重构,却不影响程序的运行假如因为某种需求,需要将user拆房表usera和表userb,该两张表的结构如下

测试表:usera有id,name,age字段

测试表:userb有id,name,sex字段

这时如果php端使用sql语句:select * from user;那就会提示该表不存在,这时该如何解决呢。解决方案:创建视图。以下sql语句创建视图:

create view user as select a.name,a.age,b.sex from usera as a, userb as b where a.name=b.name; 以上假设name都是唯一的。此时php端使用sql语句:select * from user;就不会报错什么的。这就实现了更改数据库结构,不更改脚本程序的功能了。


提高了安全性能。可以对不同的用户,设定不同的视图。例如:某用户只能获取user表的name和age数据,不能获取sex数据。则可以这样创建视图。示例如下:

create view other as select a.name, a.age from user as a;

这样的话,使用sql语句:select * from other; 最多就只能获取name和age的数据,其他的数据就获取不了了。


让数据更加清晰想要什么样的数据,就创建什么样的视图。经过以上三条作用的解析,这条作用应该很容易理解了吧


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(2)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(1)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
SQL 存储 关系型数据库
MySQL进阶突击系列(05)突击MVCC核心原理 | 左右护法ReadView视图和undoLog版本链强强联合
2024年小结:感谢阿里云开发者社区每月的分享交流活动,支持持续学习和进步。过去五个月投稿29篇,其中17篇获高分认可。本文详细介绍了MySQL InnoDB存储引擎的MVCC机制,包括数据版本链、readView视图及解决脏读、不可重复读、幻读问题的demo演示。
|
SQL 存储 关系型数据库
mysql-视图的定义和简单使用
这篇文章介绍了MySQL中视图的定义和简单使用方法,包括视图的创建规则和使用限制。通过一个实际的例子,展示了如何创建视图以及如何使用视图来简化复杂的SQL查询操作。
mysql-视图的定义和简单使用
|
NoSQL 关系型数据库 MySQL
2024Mysql And Redis基础与进阶操作系列(8)作者——LJS[含MySQL 创建、修改、跟新、重命名、删除视图等具体详步骤;注意点及常见报错问题所对应的解决方法]
MySQL 创建、修改、跟新、重命名、删除视图等具体详步骤;举例说明注意点及常见报错问题所对应的解决方法
|
SQL 安全 关系型数据库
MySQL创建视图(CREATE VIEW)13
【7月更文挑战第13天】创建视图是指在已经存在的 MySQL 数据库表上建立视图。视图可以建立在一张表中,也可以建立在多张表中。
575 1
|
缓存 DataWorks 关系型数据库
DataWorks产品使用合集之如何抽取MySQL视图数据
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
293 4
|
存储 数据可视化 关系型数据库
深入理解 MySQL 视图
深入理解 MySQL 视图
255 2
|
存储 缓存 关系型数据库
MySQL 视图:数据库中的灵活利器
视图是数据库中的虚拟表,由一个或多个表的数据经筛选、聚合等操作生成。它不实际存储数据,而是动态从基础表中获取。视图可简化数据访问、增强安全性、提供数据独立性、实现可重用性并提高性能,是管理数据库数据的有效工具。
339 0
|
安全 关系型数据库 MySQL
MYSQL--视图操作
MYSQL--视图操作

推荐镜像

更多