MySQL视图 视图的作用、视图常用语法

news2024/10/6 18:23:11

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

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

常用语法

也可以对视图进行增删改查的操作

  • 创建视图:(create [or replace]:创建或替换视图)
create [or replace] view 视图名称[(列名列表)] as select语句 [ with [cascaded | local] check option]
  • 查看创建视图语句
show create view 视图名称;
  • 查看视图数据
select * from 视图名称 ...... ;
  • 修改视图:两种写法
create [or replace] view 视图名称[(列名列表)] as select语句 [ with [cascaded | local] check option]

alter view 视图名称[(列名列表)] as select语句 [with [cascaded | local] check option]
  • 删除视图:
drop view [if exists] 视图名称 [,视图名称] ...
-- 创建视图
create or replace view stu_v_1 as select id, name from student where id <= 10;

-- 查询视图语法
show create view stu_v_1;

-- 查询视图
select * from stu_v_1 where id = 1;

-- 修改视图
create or replace view stu_v_1 as select id, name, no from student where id <= 10;
alter view stu_v_1 as select id, name from student where id <= 10;

-- 删除视图
drop view stu_v_1;

-- 插入数据
insert into stu_v_1 values (17, 'Tom');

在创建视图的时候,指定的条件为 id<=10 ,id为17的数据,查询时是不符合条件的,没有查询出来,但是这条数据已经成功的插入到了基表中。

通过借助视图的检查选项,在定义视图时,如果指定了条件,在插入、修改、删除数据时,可以做到必须满足条件才能操作否则不能够操作。

检查选项

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

cascaded级联

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

在这里插入图片描述

-- 不使用检查选项
create or replace view stu_v_1 as select id, name from student where id <= 10;
insert into stu_v_1 values (11, 'Tom'); -- 插入成功

-- 创建一个基于v1的视图
create or replace view stu_v_2 as select id, name from stu_v_1 where id <= 10 with cascaded check option;
insert into stu_v_2 values (12, 'Tom'); -- 插入失败,要同时满足 v1 v2 的条件,因为 v2 传递给了 v1

-- 创建一个基于v2的视图
create or replace view stu_v_3 as select id, name from stu_v_2 where id <= 10;
insert into stu_v_3 values (12, 'Tom'); -- 插入失败,要同时满足 v1 v2 的条件,v3 没有开启检查选项

local本地

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

在这里插入图片描述

-- 不使用检查选项
create or replace view stu_v_1 as select id, name from student where id <= 10;
insert into stu_v_1 values (20, 'Tom'); -- 插入成功

-- 创建一个基于v1的视图
create or replace view stu_v_2 as select id, name from stu_v_1 where id <= 8 with local check option;
insert into stu_v_2 values (6, 'Tom'); -- 插入成功,要满足 v2 的条件和 v1 的条件,v1 没有条件,所以满足 v2 即可

-- 创建一个基于v2的视图
create or replace view stu_v_3 as select id, name from stu_v_2 where id <= 10;
insert into stu_v_3 values (9, 'Tom'); -- 插入失败,要同时满足 v1 v2 v3 的条件,v1 v3 没有开启检查选项

视图更新

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

  1. 聚合函数或窗口函数(sum()、 min()、 max()、 count()等)
  2. distinct
  3. group by
  4. having
  5. union 或者 union all
-- 创建视图
create view stu_v_count as select count(*) from student;

-- 添加数据
insert into stu_v_count values(10); -- 添加失败

视图的作用

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

例如:

  1. 为了保证数据库表的安全性,开发人员在操作tb_user表时,只能看到的用户的基本字段,屏蔽手机号和邮箱两个字段。
create view tb_user_view as select id, name, profession, age, gender, status, createtime from tb_user;
select * from tb_user_view;
  1. 查询每个学生所选修的课程(三张表联查),这个功能在很多的业务中都有使用到,为了简化操作,定义一个视图。
create view tb_stu_course_view as
select s.name student_name, s.no student_no, c.name course_name
from student s,
     student_course sc,
     course c
where s.id = sc.studentid
  and sc.courseid = c.id;

select * from tb_stu_course_view;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/410884.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt音视频开发27-ffmpeg视频旋转显示

一、前言 用手机或者平板拍摄的视频文件,很可能是旋转的,比如分辨率是1280x720,确是垂直的,相当于分辨率变成了720x1280,如果不做旋转处理的话,那脑袋必须歪着看才行,这样看起来太难受,所以一定要想办法解析到视频的旋转角度,然后根据这个角度重新绘制。在窗体那边也…

SpringBoot使用Spring Validation案例

简单使用 Java API规范(JSR303)定义了Bean校验的标准validation-api&#xff0c;但没有提供实现。hibernate validation是对这个规范的实现&#xff0c;并增加了校验注解如Email、Length等。 Spring Validation是对hibernate validation的二次封装&#xff0c;用于支持spring m…

Machine Learning-Ex4(吴恩达课后习题)Neural Networks Learning

目录 1. Neural Networks 1.1 Visualizing the data 1.2 Model representation 1.3 Feedforward and cost function 1.4 Regularized cost function 2. Backpropagation 2.1 Sigmoid gradient 2.2 Random initialization 2.3 Backpropagation 2.4 Gradient Checking…

工厂模式白话 - 3种都有哦

前言 工厂模式&#xff08;Factory Pattern&#xff09;里所谓的“工厂”和现实生活中的工厂一样 主要作用都是生产产品 像食品厂、服装厂、汽车厂生产吃的、穿的、开的 设计模式里的工厂则是生产对象 划分 工厂模式可分为简单工厂、工厂方法、抽象工厂3种 有啥不同呢&a…

RecvByteBufAllocator内存分配计算

虽然了解了整个内存池管理的细节&#xff0c;包括它的内存分配的具体逻辑&#xff0c;但是每次从NioSocketChannel中读取数据时&#xff0c;应该分配多少内存去读呢&#xff1f; 例如&#xff0c;客户端发送的数据为1KB , 应该分配多少内存去读呢&#xff1f; 例如&#xff1a;…

梳理ERP与CRM、MRP、PLM、APS、MES、WMS、SRM的关系

数字化转型中少不了ERP系统的存在&#xff0c;CRM、MRP、PLM、APS、MES、WMS、SRM这些系统都需要一起上吗&#xff1f; 如下图所示&#xff0c;是某企业IT系统集成架构流图。 先了解一下ERP是做什么的&#xff0c;ERP就是企业资源管理系统&#xff0c;从企业的价值链分析&…

在CSDN创作了6个月,我收获了什么?文末送书~

作者主页&#xff1a;阿玥的小东东主页&#xff01; 正在学习&#xff1a;python和C/C 期待大家的关注哦 目录 一次很好的机会&#xff0c;让我开始了CSDN之旅 首先来看看我的几位领路人 创作动力 1W粉丝 在CSDN我收获了什么&#xff1f; 很高的展现量 认证创作者身份 社…

构建自动过程:FinalBuilder 8.0 Crack

使用 FinalBuilder 自动化您的构建过程很简单。使用 FinalBuilder&#xff0c;您无需编辑 xml 或编写脚本。可视化定义和调试您的构建脚本&#xff0c;然后使用 Windows 调度程序安排它们&#xff0c;或将它们与 Continua CI、Jenkins 或任何其他 CI 服务器集成。 成千上万的软…

手把手调参 YOLOv8 模型之 训练|验证|推理配置-详解

YOLO系列模型在目标检测领域有着十分重要的地位&#xff0c;随着版本不停的迭代&#xff0c;模型的性能在不断地提升&#xff0c;源码提供的功能也越来越多&#xff0c;那么如何使用源码就显得十分的重要&#xff0c;接下来通过文章带大家手把手去了解Yolov8&#xff08;最新版…

Android开发—Jetpack四件套

2017年&#xff0c;Google发布了Android Architecture Components&#xff0c;包括Room、LiveData、ViewModel和Paging等组件&#xff0c;旨在帮助开发者更轻松地实现MVVM架构。 2018年&#xff0c;Google在I/O大会上推出的一套Android开发组件库&#xff0c;旨在帮助开发者更…

Python 小型项目大全 56~60

五十六、质数 原文&#xff1a;http://inventwithpython.com/bigbookpython/project56.html 质数是只能被 1 和它自己整除的数。质数有各种各样的实际应用&#xff0c;但是没有算法可以预测它们&#xff1b;我们必须一次计算一个。然而&#xff0c;我们知道有无限多的质数有待发…

技术招聘漫谈 | Java工程师招聘难?你可能需要这份独家指南

两周前&#xff0c;我们发布了一篇关于怎样招聘前端工程师的文章&#xff08;点击此处顾&#xff09;。在文章中&#xff0c;我们分析了前端岗位有哪些必不可少的考察要点&#xff0c;以及如何在面试中考核对方是否能写出高质量的代码&#xff0c;这篇文章得到了大量技术面试官…

高完整性系统工程(四): An Overview of Alloy

目录 1. 概述 2. 指定软件设计 3. 验证设计规范 4. 验证预期属性 1. 概述 在第一章中&#xff0c;我们将解释如何使用 Alloy 来探索一个非常简单的软件组件的设计&#xff0c;即大多数操作系统中存在的众所周知的垃圾箱 或回收站。目的是对如何使用 Alloy 指定和分析软件设…

MyBatis注解开发---实现自定义映射关系和关联查询

目录 一、使用注解实现自定义映射关系 1. 编写注解方法 2. 编写测试方法 3. 查看运行结果 二、使用注解实现一对一关联查询 1. 编写注解方法 2. 编写测试方法 3. 查看运行结果 三、使用注解实现一对多关联查询 1. 编写注解方法 2. 编写测试方法 3. 查看运行结果 四…

List接口中的ArrayList与LinkedList

ArrayList ArrayList的继承实现关系图 ArrayList 底层就是⼀个 Object[] 数组&#xff0c;当实例化ArrayList时没有指定数组容量大小&#xff0c;、第⼀次添加元素&#xff08;调⽤ add() ⽅法&#xff09;时会初始化为⼀个⻓度为 10 的数组&#xff08;即默认初始化容量为 1…

[Netty源码] ByteBufAllocator内存管理器相关问题 (十一)

文章目录1.ByteBufAllocator 内存管理器2.UnpooledByteBufAllocator2.1 heap内存的分配2.2 direct内存的分配3.PooledByteBufAllocator3.1 heap内存和direct内存的分配3.2 directArena分配direct内存的流程3.3 内存规格的介绍4.缓存的相关问题4.1 缓存的数据结果4.2 命中缓存的…

一维差分思想【算法推导、深刻思考】

797. 差分 - AcWing题库 差分本质上就是前缀和的逆运算 算法推导 其实在最开始自己去完成这个题目的时候&#xff0c;感觉好像是可以往前缀和方向靠的&#xff0c;但是一下子没有想到实现方法就无疾而终了。所以最后选择的算法就只是单纯的暴力&#xff08;虽然知道过不了&…

【操作系统复习】第5章 存储器管理

存储器的层次结构 存储层次 ➢ CPU寄存器 ➢ 主存&#xff1a;高速缓存、主存储器、磁盘缓存 ➢ 辅存&#xff1a;固定磁盘、可移动介质 层次越高&#xff0c;访问速度越快&#xff0c;价格也越高&#xff0c;存储容量也最小 寄存器和主存掉电后存储的信息不再存在&a…

2024软件工程考研之《软件工程导论》专业课复习

一、考察《软件工程导论》的学校 截止目前&#xff0c;考察《软件工程导论》的学校主要有&#xff1a; 大连理工大学887 北京航天航空大学991 北京交通大学901 河海大学846 海南大学835 新疆大学841 成都信息工程大学809 长安大学846 天津工业大学840 华东交通大学837 大连交通…

采购招投标系统-高效管控招采流程-降低采购成本

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及…