mysql---视图详解

2023-09-13 17:43:42

提示:视图最大的优点用来协助用户提高查询效力以及保护数据安全


视图

视图(View)是一个虚拟表,其内容由select查询定义。同真实的表一样,是一个select查询的结果集,所有数据来源于基表
视图其实就是一个select返回的结果集,用于方便我们查询而创建的"临时表",简化我们的查询语句

视图用来协助查询效力保护数据安全,创建视图定义数据来源基表select

视图的作用:

方便: 视图是select的结果集可以根据条件生成,从而提高了查询,用户就不用关注表的结构和复杂查询,
安全: 使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。
数据独立: 一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;
**使用视图的大部分情况是为了保障数据安全性,提高查询效率;**

创建视图

单表创建视图

虽然视图可以被看成是一种虚拟表,但是其物理上是不存在的,即MySQL并没有专门的位置为视图存储数据。根据视图的概念可以发现其数据来源于(基表)查询语句也可以来源与其他视图的依赖
基本语法:

 CREATE[OR REPLACE] VIEW viewname[(columnlist)]   
    AS SELECT statement  

单表创建视图就是简单的一张表进行的select

1、依赖基表创建视图

create view  emp_view as select * from emp

as后面的select查询根据需要进行自定义创建视图

create view  emp_view as select * from emp  where id=100

create view  emp_view as select name from emp  where id=100

2、依赖视图创建视图

create view view2 as select * from view1;

相关的条件同上述基表创建雷同

多表创建视图

CREATE[OR REPLACE] VIEW viewname[columnlist]   
    AS SELECT statement 

SELECT statement表示SELECT语句。与单表上创建视图不同的是,SELECT子句是涉及到多表的联合查询语句

create view view_student_teacher 
    as select class.id as teacher_id,teacher,class,student.id,student.name,sex 
    from class 
        left join student on class.id=student.class_id;

创建多表视图select设计到联表查询、子查询、复杂查询

查看视图

show tables

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| emp            |
| emp_view       |
+----------------+
2 rows in set (0.00 sec)

show create view emp_view;

mysql> show create view emp_view;
+----------+------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View     | Create View                                                                                                                        | character_set_client | collation_connection |
+----------+------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| emp_view | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `emp_view` AS select `emp`.`id` AS `id` from `emp` | utf8mb4              | utf8mb4_0900_ai_ci   |
+----------+------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+

show create view/table 语句查看视图创建信息、表创建信息

更新视图数据

更新视图是指通过视图来插入(INSERT)、更新(UPDATE)和删除(DELETE)表中的数据。因为视图实质是一个虚拟表,其中没有数据,通过视图更新时都是转换到基本表更新。更新视图时,只能更新权限范围内的数据,超出范围就不能更新了。

不能更新的情况
要使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系。如果视图包含以下任何一项,则该视图不可更新
视图中包含SUM()、COUNT()、MAX()和MIN()等函数;
视图中包含UNION、UNION ALL、DISTINCT、GROUP BY和HAVING等关键字;
视图对应的表存在没有默认值的列,而且该列没有包含在视图里;
包含子查询的视图;
其他特殊情况

修改视图

修改视图是指修改数据库中存在的视图,当基本表的某些字段发生变化的时候,可以通过修改视图来保持与基本表的一致性。ALTER语句来修改视图

注意,当真实表中修改了某个存在视图中的字段时,这个视图也需要跟着变,否则会变成无效的视图

删除视图

删除视图是指删除数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据。

DROP VIEW viewname [,viewnamen];

DROP VIEW 视图1,视图2可以进行批量删除视图

更多推荐

idea把项目打成jar包步骤详解

最近产品需要预研一个小功能,开始后在本地开发测试好之后,需要打成jar提供出去,今天弄完了,决定把这个步骤记录下来,便于以后轻车熟路。打成jar要有mian方法的入口,所以我们在代码中需要定义一个main方法,然后通过这个main方法调用我们的核心逻辑代码。下面是我的代码示例:publicstaticvoidmain(

基于微信小程序的图书管理系统设计与实现(源码+lw+部署文档+讲解等)

前言💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗👇🏻精彩专栏推荐订阅👇🏻2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选

使用 OpenWRT 设置 Banana Pi BPI-R3开源硬件路由器

这里介绍如何使用pfSense将ZimaBoard216设置为防火墙的链接。我们正在为小型板计算机建立一个专用网络,这样当我开始教授Linux时,我就可以显示和共享它的IP。现在为我的网络设置一条到pfSense后面的路由。这是为了提供另一个级别的安全性。我有两台Banana-Pi路由器1)Banana-PiR2Pro

【案例教学】华为云API图引擎服务 GES的便捷性—AI帮助快速处理图片小助手

云服务、API、SDK,调试,查看,我都行阅读短文您可以学习到:人工智能AI快速处理图片1IntelliJIDEA之API插件介绍API插件支持VSCodeIDE、IntelliJIDEA等平台、以及华为云自研CodeArtsIDE,基于华为云服务提供的能力,帮助开发者更高效、便捷的搭建应用。API插件关联华为云服务下

虹科教您 | 可实现带宽计量和延迟计算的时间敏感网络测试工具RELY-TSN-LAB操作指南与基本功能测试

1.RELY-TSN-LAB产品概述时间敏感网络(TSN)能够合并OT和IT世界,这将是真正确保互操作性和标准化的创新性技术。这项技术的有效开发将显著降低设备成本、维护、先进分析服务的无缝集成以及减少对单个供应商的依赖。为了在这些网络中实现确定性,需要控制连接到网络的设备的延迟和带宽,并预测其在拥堵和错误情况下的行为。

利用Windows搭建Emby媒体库服务器,轻松实现无公网IP的远程访问

文章目录1.前言2.Emby网站搭建2.1.Emby下载和安装2.2Emby网页测试3.本地网页发布3.1注册并安装cpolar内网穿透3.2Cpolar云端设置3.3Cpolar内网穿透本地设置4.公网访问测试5.结语1.前言在现代五花八门的网络应用场景中,观看视频绝对是主力应用场景之一,加上移动网络技术的发展,随时

【RNN从入门到实战】GRU入门到实战——使用GRU预测股票。

摘要GRU是LSTM网络的一种效果很好的变体,它较LSTM网络的结构更加简单,而且效果也很好,因此也是当前非常流形的一种网络。GRU既然是LSTM的变体,因此也是可以解决RNN网络中的长依赖问题。在LSTM中引入了三个门函数:输入门、遗忘门和输出门来控制输入值、记忆值和输出值。而在GRU模型中只有两个门:分别是更新门和

跳槽面试:如何转换工作场所而不失去优势

🌷🍁博主猫头虎带您GotoNewWorld.✨🍁🦄博客首页——猫头虎的博客🎐🐳《面试题大全专栏》文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大

低代码系统哪里好

低代码作为近些年来被热议的话题,一直备受争议。低代码的出现更多的是用来辅助那些没有太多技能的人士而使用,在某些方面依然需要强大的代码来解决生产革新。所以低代码也不是浑水猛兽,也需要根据实际情况加以利用。那么为什么低代码会收到如此的争议呢?数聚将从多个角度来为企业主做揭秘。首先,什么是低代码系统呢?低代码系统是一种通过封

线程池概念讲解

目录一:基本概念二:为什么要使用线程池三:使用线程池有哪些优势四:线程池应用场景介绍一:基本概念线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们前面学过的实现了Runnable或Callable接口的实例对象二:为

Dubbo常考知识点

Dubbo常考知识点Dubbo⽀持哪些负载均衡策略Dubbo是如何完成服务导出的?Dubbo是如何完成服务引⼊的?Dubbo的架构设计是怎样的?Dubbo⽀持哪些负载均衡策略随机:从多个服务提供者随机选择⼀个来处理本次请求,调⽤量越⼤则分布越均匀,并⽀持按权重设置随机概率轮询:依次选择服务提供者来处理请求,并⽀持按权重

热文推荐